Estou trabalhando em um projeto bash. Preciso obter todos os valores (um de cada vez porque os usarei em outro lugar) de um arquivo de texto. O arquivo de texto que irei receber está estruturado assim:
Report:
-----------
Name Column1 Column2 Column3 Column4
row1 val1 val2 val3 val4
row2 val5 val6 val7 val8
row3 val9 val10 val11 val12
Não há uma quantidade fixa de linhas e colunas, então precisarei de algo geral. Como recupero cada val um por um no bash? Obrigado.
Responder1
Você pode processar o conteúdo de um arquivo linha por linha, usando bash
while
loop:
i=1
while IFS= read -a line; do
printf "Line number %d:\n" $i
printf "%s\n" "${line[@]}"
let i++
done < "file.txt"
Cada linha é armazenada em array line
, você pode obter cada elemento do array line
por sintaxe:
echo "${line[n]}"
onde n
está a ordem do elemento na matriz.
Responder2
E através do comando 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
Ele pula a linha que começa Report,---,Name
e imprime todos os valores da segunda coluna até o final de cada linha. Os valores são impressos em uma nova linha.