Mám níže uvedený soubor
var 3 2014 string var1 4 2011 string4 var2 6 1999 string2 var3 1 2016 string6
Pak mám to while read loop to compare one of the columns to a number then echo something. Namísto opakování mé požadované fráze však odráží něco jiného.
while read num do if [ "$num" = "0" ]; then echo "Number is equal to zero" else echo "number is not equal to 0" fi done < home/dir/file.txt | awk "{print $2}"
místo opakování výše uvedeného ozývá druhý sloupec souboru.
Komentáře
Odpověď
měli byste zkusit
awk "{print $2}" home/dir/file.txt | while read num do if [ "$num" = "0" ]; then echo "Number is equal to zero" else echo "number is not equal to 0" fi done
pro smíšené řešení awk / bash.
Jak již uvedli ostatní, přesměrování awk nastane později.
Odpověď
Vypadá to, že se snažíte přesměrovat výstup home/dir/file.txt | awk "{print $2}" na while smyčka;
první Myslím, že správná cesta by měla být /home/dir/file.txt (je to však jen předpoklad);
druhý /home/dir/file.txt | awk "{print $2}" nepřesměruje obsah /home/dir/file.txt na awk , zatímco < /home/dir/file.txt awk "{print $2}" ano;
za třetí, přesměrováváte výstup příkazu jako soubor, ale jedná se o řetězec a měli byste jej přesměrovat jako it: <<< "$(< /home/dir/file.txt awk "{print $2}")".
Alternativně můžete výstup příkazu přesměrovat přímo do smyčky while místo toho: .
while read num do if [ "$num" = "0" ]; then echo "Number is equal to zero" else echo "number is not equal to 0" fi done <<< "$(< /home/dir/file.txt awk "{print $2}")"
nebo
< /home/dir/file.txt awk "{print $2}" | while read num do if [ "$num" = "0" ]; then echo "Number is equal to zero" else echo "number is not equal to 0" fi done
odpověď
Protože nemohu komentovat, jen se ptám, proč lidé nepoužívají IFS
while IFS=" " read var num year string do if [[ $num -eq 0 ]]; then echo "Number is equal to zero" else echo "number is not equal to 0" fi done < home/dir/file.txt
read numa očekáváte, že výsledkem bude jediné číslo (které porovnáte s řetězcem " 0 "), ale ve skutečnosti čtete vstupní soubor se 4 sloupci, takže$numbude řetězec se 4 sloupci.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt?while…donesmyčka. Tj.isx4