У меня есть таблица символов в форме

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>

Как видно, этот файл содержит две колонки. Первый столбец - это название аудиофайла (с расширением .wav), а второй столбец - расшифровка аудиофайла.

Второй столбец должен состоять не более чем из 4 слов (исключая теги; теги - это слова, написанные в <>).

Например, рассмотрим вторую строку. Эта строка содержит только одно слово, то есть jau (обратите внимание, что

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

не включены в число слов, потому что они являются тегами).

По сути, в любой строке слово во втором столбце является строкой, не заключенной в <>.

Теперь моя задача - найти только те строки, которые содержат не более 4 слов во втором столбце.

Для вашего удобства вот ожидаемый результат

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

Я получил следующий вывод, потому что второй столбец содержал только два слова, т.е. haraa и keelaa, а вторая строка состояла только из одного слова, т.е. jau во втором столбце.

Кроме этих строк, строки состояли из более чем 4 слов во втором столбце.

2 ответа2

0

Если у вас нет хитрых полей (таких как экранирование больше, чем знаки внутри тегов), то это типичная задача для 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>
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>
$ 

Или более гибко (но более неясно)

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

Последнее легче, если "not> 4" когда-либо станет чем-то вроде "not> 22".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .