如果最后 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
如果最后 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