Pracuję nad skryptem, który analizuje informacje w otwartych dokumentach xml i analizuje dane wyjściowe ze skryptu, aby zapewnić wyjście csv.
Utknąłem na ostatniej przeszkodzie.
find /media/path/to/files -type f -iname "*.xlsx" -exec perl parseXML.py {} ;
| grep -v "Document name|creator|lastModified|Printed|created|modified"
| tr "n" "."; echo n
>> list.csv
Problem z tym wyjściem polega na tym, że kończę na jednej masywnej liście dla wszystkich dokumentów i sortowanie tego w pythonie lub perlu pojawia się powyżej mojego poziomu wiedzy.
Miałem nadzieję, że istnieje sposób na uniknięcie tego, występując z przesunięciem za pomocą sed
(find /media/E01880-0-CH5-W001/Working/E01880-4-CH5-E001/ED/ -type f -iname "*.xlsx" -exec perl parseXML.py {} ; | grep "Document name|creator|lastModified|Printed|created|modified" | tr "n" "."; echo )n >> list.csv
Niestety bez skutku, usuwa to tylko linię zawierającą zmodyfikowane informacje.
W końcu tego wieczoru próbowałem zmienić wyjście używając sed i niektórych wyrażeń regularnych
cat PleaseWork.csv | sed -i "s/modified[^"rn]*./&\n/g" >> NewFile.csv
Gdzie powinna zastąpić teoriazmodyfikowany i wszystkie znaki aż do okresu z dopasowanym wyrażeniem i nową linią, ale otrzymałem błąd sed bez plików wejściowych i myślę, że na razie gapiłem się wystarczająco na ekranie.
Proszę pomóż.
Używam kodu snortdlp wyłączonego z google:
http://snortdlp.googlecode.com/svn-history/r115/trunk/src/python/read_open_xml.pl
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli poprawnie zinterpretuję twoje pytanie, jesteśpróbując wypisać całą linię (ale nie nową linię) dla wszystkich plików, które pasują do „Nazwa dokumentu”, „twórca” itp., i wydrukować całą linię (i nową linię) dla linii pasujących do „zmodyfikowanych”. Po prostu pomiń grep i zamiast tego użyj awk:
awk "/Document name|creator/{printf "%s.", $0} /modified/"
(Skróciłem mecz, aby był bardziej klarowny - dodaj inne tagi w razie potrzeby).