
Я пробую этот простой 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