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