Extrai todas as linhas de um arquivo iniciando com alguma sequência e depois imprime em outro arquivo

5

Eu tenho um arquivo .csv com conteúdo semelhante a este:

BIHAR,PURNIA,DAGARUA,BELGACHHI,BELGACHHI,KARBOLA TOLA,0,0,312,0,0,312,Fully Covered,NO,NO,01_04_2010,241656,312,2123,910,1811.5
BIHAR,PURNIA,SRINAGAR,THARI,THARI,ARBANNA,0,0,312,0,0,312,Fully Covered,NO,NO,01_04_2010,244374,312,2123,910,1811.5
BIHAR,PURNIA,RUPAULI,DHOBGIDHA-RUPAULI,DHOBHGIDHA-RUPAULI-II,MATELI,0,0,312,0,0,312,Fully Covered,NO,NO,01_04_2010,243748,312,2123,910,1811.5
ETCETC,PURNIA,KRITYANAND NAGAR,CHUNAPUR,BANBHAG,BANGALI TOLA KOSHI KINARA,0,0,312,0,0,312,Fully Covered,NO,NO,01_04_2010,242663,312,2123,910,1811.5

Eu quero pegar todas as linhas que começam com BIHAR e, em seguida, enviá-lo para outro arquivo csv separado. Como eu faço isso?

Eu tentei usar o recurso "Localizar tudo" do sublime e, em seguida, use a seta para a direita até o final da linha para realçá-las, mas infelizmente algumas linhas são muito mais longas do que as outras para não funcionar. Existem cerca de 100'000 linhas no arquivo .txt.

Eu também tentei com o sed:

sed -n 'BIHAR /myfile.txt' /newfile.txt

EDIT: Por alguma razão, o grep / sed / awk ignora as novas linhas no final de cada linha e, como resultado, ele tenta apenas corresponder à primeira linha e nada mais, como eu corrijo isso? / strong>

    
por ifma 25.10.2015 / 17:08

2 respostas

8

Tente isso com o GNU sed:

sed -n '/^BIHAR/p' file > new_file

ou com o grep:

grep '^BIHAR' file > new_file

ou com o awk:

awk '/^BIHAR/' file > new_file
    
por 25.10.2015 / 17:18
1

do grep

 grep ^BIHAR file > new_file

do awk

 awk '/^BIHAR/' file > new_file

pedantes do awk

 awk -F, '$1 == "BIHAR" { print $0 ;} file > new_file

edit: ao usar o arquivo vindo do windows world, certifique-se de usar o dos2unix para converter o fim de linha

  dos2unix dosfile > unixfile
    
por 25.10.2015 / 17:22

Tags