Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 查找与模式匹配的行,前提是它们在指定列中的值在输入文件中正好出现两次_Unix_Awk_Grep - Fatal编程技术网

Unix 查找与模式匹配的行,前提是它们在指定列中的值在输入文件中正好出现两次

Unix 查找与模式匹配的行,前提是它们在指定列中的值在输入文件中正好出现两次,unix,awk,grep,Unix,Awk,Grep,假设输入为.csv文件: a,b_b,3,c d,k_k,3,f g,h_h,3,i j,k_k,4,l m,n_n,4,o p,k_k,5,q r,s_s,5,t 我想要这个输出: 包含图案k_k的所有行,其第三列中的编号正好位于两行中,例如:编号4和5: j,k_k,4,l p,k_k,5,q 这可能很简单,但我找不到实现这一点的方法。有人能帮我使用Unix命令行awk吗 awk '/k_k/' && ?? file.csv 我想你想要这样的东西: awk -F, 'F

假设输入为.csv文件:

a,b_b,3,c
d,k_k,3,f
g,h_h,3,i
j,k_k,4,l
m,n_n,4,o
p,k_k,5,q
r,s_s,5,t
我想要这个输出:

包含图案k_k的所有行,其第三列中的编号正好位于两行中,例如:编号4和5:

j,k_k,4,l
p,k_k,5,q
这可能很简单,但我找不到实现这一点的方法。有人能帮我使用Unix命令行awk吗

awk '/k_k/' && ?? file.csv

我想你想要这样的东西:

awk -F, 'FNR==NR{a[$3]++;next} /k_k/ {if(a[$3]==2)print $0}' file file
我假设您的意思是第3列中的数字在文件中正好出现两次,而不是数字4或5。此解决方案对文件进行2次传递,以计算每个数字第一次出现在第3列中的次数,并第二次打印匹配行。因此,在命令行上指定输入文件两次

作为说明,它计算了[1]中第3列中出现1的次数,并计算了[2]中第3列中出现2的次数,以此类推


阅读你的问题标题,它说最多两行,所以如果发生在一行中也可以,你应该将我的代码中的==改为我想你想要这样的东西:

awk -F, 'FNR==NR{a[$3]++;next} /k_k/ {if(a[$3]==2)print $0}' file file
我假设您的意思是第3列中的数字在文件中正好出现两次,而不是数字4或5。此解决方案对文件进行2次传递,以计算每个数字第一次出现在第3列中的次数,并第二次打印匹配行。因此,在命令行上指定输入文件两次

作为说明,它计算了[1]中第3列中出现1的次数,并计算了[2]中第3列中出现2的次数,以此类推


阅读你的问题标题,它说最多两行,所以如果发生在一行中也可以,你应该把我代码中的==改为输入中没有行j,k,4,l,也没有p,k,5,9。请修正和/或澄清。也不清楚第三列中的数字是什么,只有两行是什么意思。只有两行中的数字表示a正好在两行中,还是b最多在两行中?题目暗示了后者;请澄清。您的输入中没有第j、k、4、l行,也没有第p、k、5、9行。请修正和/或澄清。也不清楚第三列中的数字是什么,只有两行是什么意思。只有两行中的数字表示a正好在两行中,还是b最多在两行中?题目暗示了后者;请澄清。FWIW我会在字段2上使用相等测试,将测试放在条件部分的a[$3]上,并删除冗余打印$0:awk-F,'NR==FNR{cnt[$3]++;next}$2==k_k&&cnt[$3]==2'文件,但其他方法相同。感谢您的帮助!这很有帮助+1.FWIW我会在字段2上使用相等测试,将测试放在条件部分的a[$3]上,并删除冗余打印$0:awk-F,'NR==FNR{cnt[$3]++;next}$2==k_k&&cnt[$3]==2'文件,但其他方法相同。感谢您的帮助!这很有帮助!