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

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

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

내 텍스트 파일

# 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

관련 정보