打印第二个字段中包含有限单词的行

打印第二个字段中包含有限单词的行

我有一个形式为的符号表

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”之类的话,后者就更容易了。

相关内容