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 num
a 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$num
bude řetězec se 4 sloupci.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt
?while
…done
smyčka. Tj.is
x4