bash while 루프가 예상한 내용을 인쇄하지 않습니다.

bash while 루프가 예상한 내용을 인쇄하지 않습니다.

나는 whilebash에서 이 간단한 루프를 시도하고 있습니다.

내 텍스트 파일

# cat test.txt
line1:21
line2:25
line5:27
These are all on new line

내 스크립트

# cat test1.sh
while read line
do
        awk -F":" '{print $2}'
done < test.txt

산출

# ./test1.sh
25
27

출력에 첫 번째 줄 $2값이 인쇄되지 않습니다. 누구든지 이 사건을 이해하도록 도와주실 수 있나요?

답변1

해당 루프는 필요하지 않습니다.

$ awk -F ':' '{ print $2 }' test.txt
21
25
27

awk입력을 한 줄씩 처리합니다.


루프를 사용하면 read파일의 첫 번째 줄을 얻게 되는데, 이는 사용/출력되지 않기 때문에 손실됩니다. 그런 awk다음 루프의 표준 입력을 인수하고 파일의 다른 두 줄을 읽습니다(따라서 루프는 단 한 번의 반복만 수행합니다).

주석이 달린 루프:

while read line                # first line read ($line never used)
do
    awk -F ':' '{ print $2 }'  # reads from standard input, which will
                               # contain the rest of the test.txt file
done <test.txt

답변2

을 추가하여 코드를 수정할 수 있습니다 echo. 그 이유는 다음과 같습니다.거기, 왜 다른 두 값을 인쇄하는지 질문합니다.

while read line;
do
        echo "$line" | awk -F":" '{print $2}'
done < test.txt

답변3

while IFS=":" read z x; do 
  echo $x; 
done<test.txt

또는

sed "s/^.*://g" test.txt

관련 정보