Van egy olyan fájlom, mint lent
var 3 2014 string var1 4 2011 string4 var2 6 1999 string2 var3 1 2016 string6
Akkor ezt olvasás közben, hogy összehasonlítsuk az egyik oszlopot egy számmal, majd visszhangozzunk valamit. Azonban ahelyett, hogy a kívánt kifejezésemet visszhangozná, valami mást is visszhangoz.
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}"
a fentiek visszhangja helyett a fájl 2. oszlopát.
Megjegyzések
Válasz
meg kell próbálnia
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
az awk / bash vegyes megoldáshoz.
Amint más megjegyezte, az awk átirányítás később következik be.
Válasz
Úgy tűnik, hogy megpróbálja átirányítani a home/dir/file.txt | awk "{print $2}"
kimenetét a while
ciklus;
először azt hiszem, hogy a helyes elérési útnak /home/dir/file.txt
legyen (azonban ez csak feltételezés);
második /home/dir/file.txt | awk "{print $2}"
nem irányítja át a /home/dir/file.txt
tartalmat a awk
, míg az < /home/dir/file.txt awk "{print $2}"
;
harmadszor, a parancs kimenetét fájlként átirányítja, de ez karakterlánc, és át kell irányítania it: <<< "$(< /home/dir/file.txt awk "{print $2}")"
.
Alternatív megoldásként a parancs kimenetét közvetlenül a while
hurokba is továbbíthatja ehelyett: .
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}")"
vagy
< /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
Válasz
Mivel nem tudok hozzászólni, csak kíváncsi vagyok, miért nem használták az emberek az IFS-t
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
műveletet hajtja végre, és az eredmény egyetlen számra számít (amelyet összehasonlít a " 0 ), de valójában egy 4 oszlopos bemeneti fájlt olvasol, így$num
egy karakterlánc lesz, benne 4 oszloppal.awk '{if ($2==0){print "equal"}else{print "not"}}' file.txt
?done
hurok. Vagyis:is
x4