bash: como adicionar valor atribuído ao arquivo

2

Eu tenho o script bash passando por vários arquivos em um diretório. O identificador de arquivo foi salvo como uma variável $num . O que eu gostaria de fazer é adicionar $num como outra coluna em meus dados, como no exemplo abaixo:

ENTRADA ORIGINAL:

A B C D E
2 79 56 SD L
1 09 67 JK S
9 60 37 KD G
0 10 47 SO E

SAÍDA ESPERADA:

A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1

* no exemplo acima, $num = 1

Por fim, quero pegar um subconjunto de linhas de cada arquivo em loop e enviá-las para um único arquivo grande. Para eu saber de qual arquivo a linha veio, preciso do id de $num .

Eu tentei usar awk '{$12 = $num}' filename , mas isso não funciona de forma alguma.

Por favor, ajude!

    
por Bob 26.10.2015 / 16:22

2 respostas

1

try (o awk pode estar em uma linha)

 id=...
 awk -v id=$id 'NR==1 { x=NF+1 ; $x = "id" ; print ; }
                NR > 1 { x=NF+1 ; $x = id ; print ; } ' file > new_file

onde

  • -v id=$id cola id do shell para o awk, se id tiver um caractere engraçado, use -v id="îd"
  • NR == 1 , NR > 1 selecione primeiro, outra linha
  • { x=NF+1 ; $x = id ; print ; } push $ id (id no awk)
por 26.10.2015 / 16:27
0

O seguinte script sed pressupõe que o separador de campos é um espaço. Se for uma guia, altere o espaço nos dois comandos s/// sed para \t .

A primeira linha tem id acrescentado, as segundas e subsequentes linhas têm $num acrescentado.

$ num=1
$ sed -e "1 s/$/ id/ ; 2,$ s/$/ $num/" input.txt 
A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1
    
por 26.10.2015 / 22:07