Como selecionar, copiar e colar algumas colunas de arquivos diferentes e criar um arquivo deles?

6

Eu quero criar e organizar dados em um arquivo de vários arquivos, selecionando partes das colunas dos arquivos fornecidos. Tenho mais de 10 arquivos para copiar a segunda, terceira e quarta colunas de cada arquivo e colá-las em um único arquivo.

    
por AiB 09.09.2013 / 22:15

2 respostas

11

Isso também pode ser feito facilmente com awk .

$ awk '{print $2,$3,$4}' *.txt > collapsed_output.txt

Exemplo

Veja alguns dados de amostra.

$ seq 20 | paste - - - - - > sample.txt

Veja como são as linhas:

$ head sample.txt 
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20

Agora vamos fazer 10 cópias:

$ seq 10 | xargs -I{} cp sample.txt sample{}.txt

Agora temos os seguintes arquivos:

$ tree
.
|-- sample10.txt
|-- sample1.txt
|-- sample2.txt
|-- sample3.txt
|-- sample4.txt
|-- sample5.txt
|-- sample6.txt
|-- sample7.txt
|-- sample8.txt
|-- sample9.txt
'-- sample.txt

Agora, se executarmos o comando awk :

$ awk '{print $2, $3, $4}' sample{1..10}.txt | column -t
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
...

Aqui estou mostrando a saída dos 3 primeiros arquivos ( sample01.txt ... sample03.txt ). Também estou formatando a saída com o comando column -t , mas isso é apenas para fins de exibição para facilitar a visualização da saída aqui em U & L.

A formatação adicional poderia ser feita facilmente com o comando awk , mas isso parecia estar além do escopo da questão.

    
por 09.09.2013 / 23:23
4

Dê uma olhada no utilitário de linha de comando chamado cut . Pode extrair colunas se elas estiverem separadas por um delimitador exclusivo. Para recombinar as partes, você pode usar paste .

Se você tiver, por exemplo, um formato típico separado por vírgulas

$ cat debts.csv
Name,Age,Debt
Alice,20,1337
Bob,30,42

$ cat pets.csv
Name,Pet
Alice,Dog
Bob,Cat

você pode extrair nomes e dívidas com

$ cut -d, -f1,3 debts.csv
Name,Debt
Alice,1337
Bob,42

e combine dívidas com animais de estimação usando

$ cut -d, -f2 pets.csv | paste -d, debts.csv -
Name,Age,Debt,Pet
Alice,20,1337,Dog
Bob,30,42,Cat
  • Com cut e paste , -d determina o delimitador para os campos,
  • -f seleciona as colunas para extrair para cut e
  • - direciona para usar a entrada padrão (ou seja, no último paste caso, do canal) em vez de um arquivo.
por 09.09.2013 / 22:22