Divide um arquivo delimitado em vários arquivos com base nos valores de uma coluna

0

Eu tenho um arquivo de texto com 6 campos delimitados por ~ . Eu preciso escrever as linhas para vários novos arquivos cujos nomes são baseados no campo 5 da linha, de tal forma que todas as linhas com o mesmo campo 5 terminam no mesmo arquivo. Por exemplo, todas as linhas com foo no quinto campo devem acabar em Src_foo.txt .

Entrada de amostra

WatchListEntry_20180820_DLY_0.dat~3~NA~USD~AMLCOMP~2018-08-20~
WatchListEntry_20180820_DLY_2.dat~3~NA~USD~CBNABI~2018-08-20~
WatchListEntry_20180820_DLY_99.dat~3~NA~USD~AMLDW~2018-08-20~
BackOfficeTransaction_20180820_DLY_1.dat~5~0~USD~CBNABI~2018-08-

Saída de amostra

Src_AMLCOMP.txt

WatchListEntry_20180820_DLY_0.dat~3~NA~USD~AMLCOMP~2018-08-20 

Src_AMLDW.txt

WatchListEntry_20180820_DLY_99.dat~3~NA~USD~AMLDW~2018-08-20

Src_CBNABI.txt

WatchListEntry_20180820_DLY_2.dat~3~NA~USD~CBNABI~2018-08-20
BackOfficeTransaction_20180820_DLY_1.dat~5~0~USD~CBNABI~2018-08-20
    
por Chandrakala 06.09.2018 / 14:03

2 respostas

3

Quão longe

awk -F"~" '{print >> ("Src_" $5 ".txt")}' file

você? Você pode precisar fechar os arquivos de saída se chegar perto do número máximo de arquivos abertos permitidos.

    
por 06.09.2018 / 14:24
1

Tente isto:

for i in 'cat file.txt'
do
        File='echo $i | awk -F '~' '{print "Src_"$5".txt"}''
        echo "$i" >> $File
done
  • passe o conteúdo de file.txt linha por linha para for loop.
  • extraia o quinto campo e Src_ como prefixo e .txt como o sufixo para declará-lo como nome de arquivo
  • em seguida, passe o conteúdo para o arquivo.
por 06.09.2018 / 14:19