Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Uran 05 Ledna 2012, 10:05:33
-
Vytahavam neco z xls souboru. Nejdrive provedu konverzi na csv a pak pomoci awk a sed preformatovavam.
V zasade potrebuji vytisknout 1 a 2 sloupec a jako treti konstantu (nazev mesice uvedeny v kazdem cls textaku)
Nedari se mi do toho tretiho sloupce nacpat tu promenou "$G", kterou taham z kazdeho jednotliveho csv. Vypisou se vsechny sloupce.
#!/bin/bash
find . -iname '*.xls' | while read F
do unoconv -f csv "$F"
G="`cat "${F%.*}.csv" | awk -F "," '{print $2}' | sed -n '2 p'`"
cat "${F%.*}.csv" | awk -F "," '{print $1, $2, $G}' >> ../vystup.txt
done
Naproti tomu kdyz misto $G hodim treba "vvv" tak se ve tretim sloupci normalne vypise.
#!/bin/bash
find . -iname '*.xls' | while read F
do unoconv -f csv "$F"
G="`cat "${F%.*}.csv" | awk -F "," '{print $2}' | sed -n '2 p'`"
cat "${F%.*}.csv" | awk -F "," '{print $1, $2, "vvv"}' >> ../vystup.txt
done
-
Jsou dvě možnosti, jak předat "vnější" proměnnou awku
přes parametr -v (asi jednodušší)
awk -v promenna=$G '{print $1 promenna}' soubor
nebo použitím bash expansion
awk "{print \$1 \"$G\"}" soubor
-
Jsou dvě možnosti, jak předat "vnější" proměnnou awku
přes parametr -v (asi jednodušší)
awk -v promenna=$G '{print $1 promenna}' soubor
nebo použitím bash expansion
awk "{print \$1 \"$G\"}" soubor
Dekuji s tim parametrem -v mi to funguje jen jsem ji musel hodit do uvozovek "$G".
Tu expanzi moc nechapu a nejak mi nefunguje. Ze by se tam nejak byly ty dvoje ""?
echo "$G"
"B?EZEN 2011"
jakub@jakub-TravelMate-5740:~/Prechodne/2011$ awk -F "," "{print \$1 \"$G\"}" "${F%.*}.csv"
awk: {print $1 ""B?EZEN 2011""}
awk: ^ syntax error
-
Ta expanze v tomto případě nefunguje, protože je součástí proměnné " (dvojitá uvozovka), a v argumentu pak vznikne "", což awk bere jako prázdný řetězec.