Jeg har en fil som en nedenfor
var 3 2014 string var1 4 2011 string4 var2 6 1999 string2 var3 1 2016 string6 Så har jeg dette mens du leser sløyfen for å sammenligne en av kolonnene med et tall, og ekko noe. Imidlertid, i stedet for å ekko min ønsket setning, ekko det noe annet.
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}" i stedet for å ekko ovenfor, ekko det 2. kolonne i filen. p>
Kommentarer
Svar
du bør prøve
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 for en blandet awk / bash-løsning.
Som andre har påpekt, skjer awk-omdirigering senere.
Svar
 Det ser ut til at du prøver å omdirigere utdata fra home/dir/file.txt | awk "{print $2}" til while loop; 
 først antar jeg at riktig bane skal være /home/dir/file.txt (men dette er bare en antagelse); 
 andre /home/dir/file.txt | awk "{print $2}" omdirigerer ikke innholdet i /home/dir/file.txt til awk , mens < /home/dir/file.txt awk "{print $2}" gjør; 
 for det tredje omdirigerer du utdataene fra kommandoen som en fil, men den er en streng, og du bør omdirigere den som it: <<< "$(< /home/dir/file.txt awk "{print $2}")". 
 Alternativt kan du også lede utgangen av kommandoen direkte til while loop i stedet: . 
 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
Siden jeg ikke kan kommentere, bare lurer på, hvorfor folk ikke har brukt 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 numog forventer at resultatet skal være et enkelt tall (som du sammenligner med strengen " 0 "), men du leser faktisk en inndatafil med 4 kolonner, så$numvil være en streng med 4 kolonner i.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt?while…doneloop. Dvs:isx4