如果最后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位必须是与输入相匹配)。
如果最后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位必须是与输入相匹配)。
grep ';2;2;2;2;2$' file | cut -d';' -f1
$
在正则表达式代表“行结束”,所以grep的将打印所有给定字符串-d';'
在结束行告诉削减分隔用分号-f1
输出列第一列谢谢Choroba。它的工作方式和预期的一样。 – Sunny1985
随着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
你可以使用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
是连续的。
awk -F\; '/;2;2;2;2;2$/{print $1}' file
Japan
England
虽然这段代码片段是受欢迎的,并且可以提供一些帮助,但它会[如果包含* how *的解释](// meta.stackexchange.com/q/114762) *为什么*这解决了这个问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –
你有什么试过,它是如何失败?这应该可以在第一次提出Awk手册的几分钟内完成。 – tripleee