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 num
og 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å$num
vil være en streng med 4 kolonner i.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt
?while
…done
loop. Dvs:is
x4