Como posso acessar uma coluna de uma linha de dentro de uma string?

1

Eu tenho um arquivo que estou percorrendo em um loop for . Eu quero fazer algo como ...

for line in file.out; do echo "Some text before $line($2) $line($3)"; done

Onde, para cada linha, insiro a segunda e a terceira colunas dessa linha na string atual. Existe uma maneira simples de fazer isso? Posso acessar o awk de dentro de uma string?

Exemplo de entrada:

some.metric.tag_A 100500 1446043920
some.metric.tag_B 100501 1446043921
some.metric.tag_C 100502 1446043922
some.metric.tag_D 100503 1446043923

Exemplo de saída:

Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923
    
por MrDuk 28.10.2015 / 22:38

1 resposta

4

Usando o awk

O awk implicitamente percorre as linhas e separa cada linha em campos:

$ awk '{printf "Some text before %s %s\n",$2,$3}' file.out
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923

Se soubermos que o arquivo de entrada sempre terá apenas três colunas, esse comando poderá ser reduzido para (dica do Hat: Don Crissti):

$ awk '{$1="Some text before"} 1' file.out

Usando o shell

As linhas podem ser divididas em campos usando a declaração read do shell:

$ while read a b c d; do echo "Some text before $b $c" ; done <file.out
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923
    
por 28.10.2015 / 22:45