2017-03-02 24 views
-2

如果最后5个字符串匹配特定输入,我需要打印行的第一个字符串。如果最后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位必须是与输入相匹配)。

+0

你有什么试过,它是如何失败?这应该可以在第一次提出Awk手册的几分钟内完成。 – tripleee

回答

2
grep ';2;2;2;2;2$' file | cut -d';' -f1 
  • $在正则表达式代表“行结束”,所以grep的将打印所有给定字符串
  • -d';'在结束行告诉削减分隔用分号
  • -f1输出列第一列
+0

谢谢Choroba。它的工作方式和预期的一样。 – Sunny1985

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 
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是连续的。

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

虽然这段代码片段是受欢迎的,并且可以提供一些帮助,但它会[如果包含* how *的解释](// meta.stackexchange.com/q/114762) *为什么*这解决了这个问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –

相关问题