Minulla on alla oleva tiedosto
var 3 2014 string var1 4 2011 string4 var2 6 1999 string2 var3 1 2016 string6
Sitten minulla on tämä luki silmukan verrata yhtä saraketta numeroon ja toistaa sitten jotain. Halutun lauseeni toistamisen sijaan se toistaa kuitenkin jotain muuta.
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}"
Edellä esitetyn sijaan se toistaa tiedoston 2. sarakkeen.
Kommentit
Vastaa
sinun kannattaa yrittää
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
sekoitetulle awk / bash-ratkaisulle.
Kuten muut ovat huomauttaneet, awk-uudelleenohjaus tapahtuu myöhemmin.
vastaus
Näyttää siltä, että yrität ohjata home/dir/file.txt | awk "{print $2}"
-lähtöä while
-silmukka;
Ensin luulen, että oikean polun tulisi olla /home/dir/file.txt
(mutta tämä on vain oletus);
toinen /home/dir/file.txt | awk "{print $2}"
ei ohjaa /home/dir/file.txt
-sisältöä awk
, kun taas < /home/dir/file.txt awk "{print $2}"
tekee;
kolmanneksi, uudelleenohjaat komennon lähdön tiedostona, mutta se on merkkijono, ja sinun tulisi ohjata se uudelleen it: <<< "$(< /home/dir/file.txt awk "{print $2}")"
.
Vaihtoehtoisesti voit myös lähettää komennon lähdön suoraan while
-silmukkaan sen sijaan: .
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}")"
tai
< /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
vastaus
Koska en voi kommentoida, ihmettelen, miksi ihmiset eivät ole käyttäneet 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
ja oletat, että tulos on yksi numero (jota verrataan merkkijonoon " 0 "), mutta luet itse asiassa syötetiedostoa, jossa on 4 saraketta, joten$num
on merkkijono, jossa on 4 saraketta.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt
?while
…done
-silmukka. Eli:is
x4