Jag har en fil som en nedan
var 3 2014 string var1 4 2011 string4 var2 6 1999 string2 var3 1 2016 string6
Sedan har jag detta medan du läser slingan för att jämföra en av kolumnerna med ett nummer och sedan upprepa något. Istället för att eka min önskade fras, upprepar det något annat.
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}"
istället för att echo ovan, ekar det den andra kolumnen i filen.
Kommentarer
Svar
du ska försöka
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
för en blandad awk / bash-lösning.
Som andra har påpekat sker awk-omdirigering senare.
Svar
Det verkar som om du försöker omdirigera utdata från home/dir/file.txt | awk "{print $2}"
till while
loop;
först antar jag att rätt sökväg ska vara /home/dir/file.txt
(dock är detta bara ett antagande);
andra /home/dir/file.txt | awk "{print $2}"
omdirigerar inte innehållet i /home/dir/file.txt
till awk
, medan < /home/dir/file.txt awk "{print $2}"
gör;
för det tredje omdirigerar du kommandot som en fil, men det är en sträng och du bör omdirigera det som it: <<< "$(< /home/dir/file.txt awk "{print $2}")"
.
Alternativt kan du också leda utdata från kommandot direkt till while
loop istället: .
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}")"
eller
< /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
Svar
Eftersom jag inte kan kommentera, undrar jag bara varför människor inte har använt 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
och förväntar dig att resultatet blir ett enda tal (som du jämför med strängen " 0 "), men du läser faktiskt en inmatningsfil med fyra kolumner så$num
kommer att vara en sträng med fyra kolumner i den.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt
?while
…done
loop. Dvs:is
x4