Я работаю над проектом bash. Мне нужно получить все значения (по одному за раз, потому что я буду использовать их где-то еще) из текстового файла. Текстовый файл, который я получу, имеет следующую структуру:
Report:
-----------
Name Column1 Column2 Column3 Column4
row1 val1 val2 val3 val4
row2 val5 val6 val7 val8
row3 val9 val10 val11 val12
Нет фиксированного количества строк и столбцов, поэтому мне понадобится что-то общее. Как мне получить каждый val по одному в bash? Спасибо.
решение1
Вы можете обрабатывать содержимое файла построчно, используя bash
while
цикл:
i=1
while IFS= read -a line; do
printf "Line number %d:\n" $i
printf "%s\n" "${line[@]}"
let i++
done < "file.txt"
Каждая строка хранится в массиве line
, получить каждый элемент массива можно line
с помощью синтаксиса:
echo "${line[n]}"
где n
— порядок элемента в массиве.
решение2
И через команду awk,
$ awk '/^Report|^-----|^Name/ {next}{for (i=2;i<=NF;i++){print $i}}' file
val1
val2
val3
val4
val5
val6
val7
val8
val9
val10
val11
val12
Он пропускает строку, с которой начинается, Report,---,Name
и печатает все значения от второго столбца до конца для каждой строки. Значения печатаются в новой строке.