如果最后5个字符串匹配输入,则打印第一行的字符串

时间:2017-03-02 09:20:46

标签: bash awk ksh gawk

如果最后5个字符串与特定输入匹配,我需要打印第一个字符串。

示例:指定的输入为2

India;1;2;3;4;5;6
Japan;1;2;2;2;2;2
China;2;2;2;2
England;2;2;2;2;2

预期产出:

Japan
England

如您所见,China被排除在外,因为它不符合要求(最后5位必须与输入匹配)。

4 个答案:

答案 0 :(得分:2)

grep ';2;2;2;2;2$' file | cut -d';' -f1
    正则表达式中的
  • $代表"行结束",因此grep将打印以给定字符串结尾的所有行
  • -d';'告诉cut以分号分隔列
  • -f1输出第一列

答案 1 :(得分:0)

使用sed:

sed -n 's/^\([^;]*\).*;2;2;2;2;2$/\1/p' file

它以;

结尾的行捕获并输出非;2;2;2;2;2个第一个字符

可以使用GNU sed缩短它:

sed -nE 's/^([^;]*).*(;2){5}$/\1/p' file

答案 2 :(得分:0)

您可以使用awk

awk -F';' -v v="2" -v count=5 '
   {
     c=0;
     for(i=2;i<=NF;i++){
        if($i == v) c++ 
        if(c>=count){print $1;next}
     }
   }' file

,其中

  • v是要匹配的值
  • count是要打印所需字符串的最大值
  • for循环正在解析所有以;分隔的字段,以便找到匹配项

此脚本不需要5个值2连续。

答案 3 :(得分:0)

awk -F\; '/;2;2;2;2;2$/{print $1}' file
Japan
England