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 læser sløjfe for at sammenligne en af kolonnerne med et tal og derefter ekko noget. I stedet for at gentage min ønskede sætning ekko det dog noget andet.
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 at gentage ovenstående ekko det 2. kolonne i filen.
Kommentarer
Svar
du skal 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åpeget, sker awk-omdirigering senere.
Svar
Det ser ud til, at du “prøver at omdirigere output fra home/dir/file.txt | awk "{print $2}"
til while
loop;
først antager jeg, at den rigtige sti skal være /home/dir/file.txt
(dog er dette kun en antagelse);
andet /home/dir/file.txt | awk "{print $2}"
omdirigerer ikke indholdet af /home/dir/file.txt
til awk
, mens < /home/dir/file.txt awk "{print $2}"
gør;
for det tredje omdirigerer du output af kommandoen som en fil, men den er en streng, og du skal omdirigere den som it: <<< "$(< /home/dir/file.txt awk "{print $2}")"
.
Alternativt kan du også lede kommandoens output 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
Da jeg ikke kan kommentere, bare undrende, hvorfor folk ikke har brugt 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 bliver et enkelt tal (som du sammenligner med strengen " 0 "), men du læser faktisk en inputfil 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