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

print 1st string of a line if last 5 strings match input

如果最后 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 位数字必须与输入匹配)。

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

使用 sed:

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

它捕获并输出以 ;2;2;2;2;2

结尾的行中非 ; 的第一个字符

可以用 GNU sed 缩短为:

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

你可以使用 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 ;next}
     }
   }' file

哪里

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

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

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