
나는 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