来自文件的awk和regexp

时间:2014-11-22 16:30:12

标签: regex awk

我有一个文件:

first basket with apple
second basket with apricota
third basket with tomato
fourth basket with olives
fifth empty basket

我必须在每个1,3,5.N字符串中打印包含end / e,o,y / letter的每个单词。 结果必须是:苹果,番茄,空。 我可以分开1,3,5个字符串,但不能将字符串中的每个单词分开并检查它

awk '{if (NR % 2 != 0); {if (/(y|e|o)$/) print $0}}' inputfile

并且有结果

first basket with apple

3 个答案:

答案 0 :(得分:1)

您可以使用类似

的内容
$ awk 'NR % 2 { for (i=1; i<=NF; i++) if ($i  ~ /[eoy]$/) print $i}' input
apple
tomato
empty

它的作用是什么?

  • NR % 2选择第1 3 5行...

  • if ($i ~ /[eoy]$/)检查每个字段,wrod是否以eoy

  • 结尾

答案 1 :(得分:1)

好像你想要这样的东西,

$ awk '{for(i=1;i<=NF;i++){if($i ~ /.*(e|o|y)$/){print $0}}}' file
first basket with apple
third basket with tomato
fifth empty basket

只获取单词,

$ awk '{for(i=1;i<=NF;i++){if($i ~ /.*(e|o|y)$/){print $i}}}' file
apple
tomato
empty

答案 2 :(得分:0)

以下是gnu awk解决方案(由于RS中的多个字符):

awk -v RS=" |\n" '/([yeo])$/' file
apple
tomato
empty

此处RS设置为空格或换行符,因此每行会运行一个单词。