como extrair partes do arquivo em arquivos separados no linux usando comandos awk ou grep ou sed

4

Eu tenho um arquivo de texto como mostrado abaixo:

Arquivo de entrada1.txt

.......................
cha21   1       3       5       nar
cha21   2       3       6       piy
cha23   2       3       5       ram
cha23   3       3       3       dam
cha27   5       3       7       pam
................................

Eu gostaria de extrair todas as 5 colunas correspondentes às linhas de "cha21", "cha23" e "cha27" em três arquivos de saída diferentes (por exemplo, cha21.txt, cha23.txt, cha27.txt).

arquivos de saída

cha21.txt

..........
cha21   1       3       5       nar
cha21   2       3       6       piy
......................

cha23.txt

cha23   2       3       5       ram
cha23   3       3       3       dam
...................................

cha27.txt

cha27   5       3       7       pam
...........................

Eu posso fazer isso usando o comando grep 3 vezes para 3 arquivos ... Existe de qualquer maneira eu posso fazer isso de uma só vez, ou seja, um comando porque eu preciso extrair 100 arquivos de saída.

    
por Naresh DJ 12.06.2015 / 11:44

2 respostas

6

Eu tentaria

awk '{print >> $1 ".txt" ;}' 

onde

  • print imprime toda a linha.
  • >> $1 ."txt" escreve (acrescenta) esta linha ao arquivo indicado por $ 1, com .txt adicionado.

editar:

caso você tenha linhas de comentário, linhas com pontos etc.

tente

awk '$1 ~ /cha/ {print >> $1 ".txt" ;}' 

que preencheria apenas o arquivo começando com 'cha'.

    
por 12.06.2015 / 11:52
6

É fácil com awk :

awk '{print $0 >> $1".txt"}' file1.txt
    
por 12.06.2015 / 11:52

Tags