我有一个形式为的符号表
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 个单词(不包括标签;标签是写在 <> 中的单词)。
例如,考虑第二行。这一行只有一个词,即閩(注意
<s>
</s>
<babble>
<horn>
由于它们是标签,所以不计入字数统计。
本质上,在任何一行中,第二列中的单词都是未被 <> 包围的字符串。
现在我的工作是找出第二列中单词不超过 4 个的行。
为了您的方便,以下是预期的输出
M07UP49A0870I422.wav <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav <s> <horn> jau <babble> </s>
我得到了以下输出,因为第二列只包含两个单词,即 haraa 和 keelaa,而第二行仅包含一个单词,即第二列中的 jau。
除这些行之外,其他行的第二列都包含 4 个以上的单词。
答案1
如果您没有棘手的字段(例如标签内的转义大于号),那么这是 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>
答案2
$ 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”之类的话,后者就更容易了。