Linux ubuntu Awk。找到包含2个相同单词的句子

时间:2016-05-19 11:57:30

标签: linux bash awk

我想打印所有包含两个相同单词的句子。 这句话以。结尾。要么 ?或者!。

输入:

word ja ba word. Na Na word wdd? Nothing kkk
ok ok! word no this no word. ok ok. notok!
输出应该是:

Na Na word wdd?

Nothing kkk
ok ok!

ok ok.

到目前为止,这是我的代码:

 #!/bin/bash
if [ $# -eq 0 ]
 then
echo "No arguments"
 fi

if [[ -f $1 ]] #if its file
then

cat $1 | awk '{
for (i=1;i<=NF;i++)         
  {

}}'

fi

我不知道如何用AWK分隔完整的句子。我不能使用multpile文件分隔符(!重要)。如果我将它们分开,如何检查里面的每个字?我需要使用AWK。

这是我最新的想法:

cat $1 | awk  '{
 for (i=1;i<=NF;i++)         
  {
   a=0;
    if ($i ~ "\?$" || $i ~ "\!$" || $i ~ "\.$")          
    {

  #print $i;
      k='';

    for(j=$i; j!=$a; j--);
    {
      if( $j == $k)
        #print whole sentence

       $k=$j;

    }

    }
}}'

我发现单词以?/./!结尾,然后检查最后一句之前的所有单词

2 个答案:

答案 0 :(得分:4)

export default DS.Model.extend({ aRequiredField: DS.attr('date'), anOptionalField: DS.attr('date', { defaultValue: function () { return this.get('aRequiredField') ; }.bind(this) }), }); 就足够了:

grep

测试:

grep -Pzo "[^.?!]*\b(\w+) \1[^.?!]*"

说明:

  • $ echo '''word ja ba word. Na Na word wdd? Nothing kkk ok ok! word no this no word. ok ok. notok!''' | grep -Pzo "[^.?!]*\b(\w+) \1[^.?!]*" Na Na word wdd Nothing kkk ok ok ok ok 标记使-o仅返回匹配的结果,而不是
  • 中显示的行
  • grep标记使-P使用PCRE正则表达式
  • grep标志在行尾压缩换行符,将其替换为空字符。也就是说,grep知道行尾的位置,但将输入视为一个大行。
  • -z匹配句子的开头:它会匹配尽可能多的字符,但没有句子终结符(。?!)
  • [^.?!]*匹配单词字符,并将它们分组到正则表达式的第一组中。单词边界确保我们不仅匹配单词的结尾(谢谢123!)。
  • \b(\w+)引用了第一个组,因此我们必须将两个相同的单词用空格分隔
  • \1匹配句子的结尾

答案 1 :(得分:2)

$scope.getValues = function (values) { return values.filter(function (item) { return item.iscorrect === ''; }); }

gawk

设置以$ awk -v RS='[!?.] +' '{for(i=1;i<NF;i++) if($i==$(i+1)) print $0 RT "\n"}' file Na Na word wdd? Nothing kkk ok ok! ok ok. 结尾的记录和可选空格。迭代句子中的单词重复,用匹配的记录终止符打印句子,用句子之间的间隔打印新行。

以下是与此处文档相同的脚本

[!?.]

应该给你

awk -v RS='[!?.] +' '{for(i=1;i<NF;i++) if($i==$(i+1)) print $0 RT "\n"}' << EOF
> word ja ba word. Na Na word wdd? Nothing kkk
> ok ok! word no this no word. ok ok. notok!
> EOF