imprime linhas contendo palavras limitadas no segundo campo

0

Eu tenho uma tabela de símbolos no formulário

M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>
M07UP49A0861C86105.wav  <s> waa khaada aadi kaa upayoga laabhadaayaka paaya gayaa hai  </s>
M07UP49A0861C86106.wav  <s> aadi kisaan apnee stara para bhii taiyaara kara sakatee hai </s>
M07UP49A0861C86107.wav  <s> kii gobara kaa upayoga kandxee banaakara iindhana kee ruupa mee kiyaa jaata hai <bang> </s>
M07UP49A0861C86108.wav  <s> geehuun kii phasala kii katxaayii kee baada <horn> kheeto ko aaga lagaakara saapha kiyaa jaata hai <babble> </s>
M07UP49A0861C86109.wav  <s> badxqii maatraa mee jiiwaanqu jalakara nashtxa ho jaataa hai <babble> </s>

Como evidente, este arquivo contém duas colunas. A primeira coluna é o nome do arquivo de áudio (com extensão .wav) e a segunda coluna é a transcrição do arquivo de áudio

A segunda coluna deve conter no máximo 4 palavras (excluindo tags; tags são as palavras escritas em < >).

Por exemplo, considere a segunda linha. Esta linha tem apenas uma palavra, ou seja, jau (note que

<s> 
</s> 
<babble> 
<horn> 

não estão incluídos na contagem de palavras porque são tags).

Em essência, em qualquer linha, uma palavra na segunda coluna é uma string não cercada por < >.

Agora, meu trabalho é descobrir apenas as linhas que não têm mais de quatro palavras na segunda coluna.

Para sua conveniência, aqui está o resultado esperado

M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>

Eu obtive a seguinte saída porque a segunda coluna continha apenas duas palavras, ou seja, haraa e keelaa e a segunda linha consistia em apenas uma palavra, ou seja, jau na segunda coluna.

Além destas linhas, as linhas consistiam em mais de 4 palavras na segunda coluna.

    
por Upendra Pratap Singh 11.02.2016 / 10:00

2 respostas

0

Se você não tem campos complicados (como escaped maior que os sinais dentro de tags), então é uma tarefa típica para o awk:

$ awk '{ words=0;  for (i=2; i<=NF; ++i) { if ( $i !~ /^<[^>]+>$/) ++words}; if (words <= 4) print }'  input.txt
M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>
    
por 11.02.2016 / 11:53
0
$ perl -n -e "print unless / \w+ \w+ \w+ \w+ \w+ /" Snowbell
M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>
$ 

Ou mais flexível (mas mais obscuramente)

$ perl -n -e 'print unless (scalar ( ()= $_ =~ / \w+ /g) > 4)' Snowbell
M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>
$

O último é mais fácil se "não > 4" se tornar algo como "não > 22".

    
por 11.02.2016 / 12:02