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

Název: awk print a promenna
Přispěvatel: 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.
Kód: [Vybrat]
#!/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.

Kód: [Vybrat]
#!/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
Název: Re:awk print a promenna
Přispěvatel: daysleeper 05 Ledna 2012, 11:25:43
Jsou dvě možnosti, jak předat "vnější" proměnnou awku

přes parametr -v (asi jednodušší)
Kód: [Vybrat]
awk -v promenna=$G '{print $1 promenna}' soubor

nebo použitím bash expansion
Kód: [Vybrat]
awk "{print \$1 \"$G\"}" soubor
Název: Re:awk print a promenna
Přispěvatel: Uran 05 Ledna 2012, 13:15:32
Jsou dvě možnosti, jak předat "vnější" proměnnou awku

přes parametr -v (asi jednodušší)
Kód: [Vybrat]
awk -v promenna=$G '{print $1 promenna}' soubor

nebo použitím bash expansion
Kód: [Vybrat]
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 ""?

Kód: [Vybrat]
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
Název: Re:awk print a promenna
Přispěvatel: daysleeper 05 Ledna 2012, 19:15:24
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.