У меня есть файл отдельного столбца со значениями как:
40
58
76
Я хочу сделать сценарий для чтения отдельно, все это оценивает, но я не знаю способы сделать это с помощью сценария Bash.
Я хочу дисплей эха что-то вроде этого:
LINE 1 : value 40
LINE 2 : value 58
LINE 3 : value 76
Через awk
awk '{printf "%s%s%s%s\n","LINE ",NR," : value ",$1}' foo
<час> Пример
$ cat foo
40
58
76
$ awk '{printf "%s%s%s%s\n","LINE ",NR," : value ",$1}' foo
LINE 1 : value 40
LINE 2 : value 58
LINE 3 : value 76
попробуйте эту петлю Удара:
while read -r line; do let lineNumber++; echo "LINE $lineNumber : value $line"; done < file.txt
продукция:
LINE 1 : value 40
LINE 2 : value 58
LINE 3 : value 76
Для вещей как это можно использовать awk
:
$ awk '{print "LINE", NR, ": value", $0}' file
LINE 1 : value 40
LINE 2 : value 58
LINE 3 : value 76
awk
автоматически чтения одна строка в то время. NR
содержит номер строки и $0
полное содержание строки, таким образом, просто необходимо распечатать их.
Но если Вы действительно хотите Bash, говорите что-то как:
line=1
while IFS= read -r value; do
echo "LINE $line : value $value"
(( line ++ ))
done < file
Это циклично выполняется через содержание файла file
использование a while
цикл, который питается < file
. Каждый цикл, значение одной строки хранится в переменной $value
. Затем это - вопрос печати результата вместе с постепенным увеличением переменной $line
отслеживать номер строки.
Посмотрите больше информации в BashFAQ: Как я могу считать файл (поток данных, переменная) линию за линией (и/или поле полем)?.
Можно сделать это исходно в Bash> 4 использования mapfile
/ readarray
встроенный:
mapfile -t x <in
$ cat in
40
58
76
$ mapfile -t x <in
$ echo ${x[@]}
40 58 76
$ echo ${x[0]}
40
$ echo ${x[1]}
58
$ echo ${x[2]}
76
Для печати элементов массива один за другим с помощью того формата можно использовать a for
цикл:
i=1; for element in ${x[@]}; do echo "LINE $i : value $element"; ((i++)); done
$ i=1; for element in ${x[@]}; do echo "LINE $i : value $element"; ((i++)); done
LINE 1 : value 40
LINE 2 : value 58
LINE 3 : value 76