Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: awk print a promenna  (Přečteno 1700 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
awk print a promenna
« kdy: 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
"Pouze text v MS Wordu je opravdu čistý, příteli."

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:awk print a promenna
« Odpověď #1 kdy: 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

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:awk print a promenna
« Odpověď #2 kdy: 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
"Pouze text v MS Wordu je opravdu čistý, příteli."

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:awk print a promenna
« Odpověď #3 kdy: 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.

 

Provoz zaštiťuje spolek OpenAlt.