如何在bash中仅获取特定列的重复行
假设我在bash中有这个文件:如何在bash中仅获取特定列的重复行,bash,sorting,uniq,Bash,Sorting,Uniq,假设我在bash中有这个文件: 1 3 6 name1 1 2 7 name2 3 4 2 name1 2 2 2 name3 7 8 2 name2 1 2 9 name4 我如何才能提取那些重复显示字段“name”的行并对它们进行排序 我的预期产出是: 1 3 6 name1 3 4 2 name1 1 2 7 name2 7 8 2 name2 我试图使用sort-k4,4myfile | uniq-D,但我找不到如何告诉uniq使用第四列。 谢谢 你能试试下面的吗 awk ' {
1 3 6 name1
1 2 7 name2
3 4 2 name1
2 2 2 name3
7 8 2 name2
1 2 9 name4
我如何才能提取那些重复显示字段“name”的行并对它们进行排序
我的预期产出是:
1 3 6 name1
3 4 2 name1
1 2 7 name2
7 8 2 name2
我试图使用sort-k4,4myfile | uniq-D
,但我找不到如何告诉uniq
使用第四列。
谢谢 你能试试下面的吗
awk '
{
a[$NF]++
b[$NF]=(b[$NF]?b[$NF] ORS:"")$0
}
END{
for(i in a){
if(a[i]>1){
print b[i]
}
}
}
' Input_file
或者,如果要对输出进行排序,请尝试以下操作
awk '
{
a[$NF]++
b[$NF]=(b[$NF]?b[$NF] ORS:"")$0
}
END{
for(i in a){
if(a[i]>1){
print b[i]
}
}
}
' Input_file | sort -k4
您可以使用此
awk+sort
:
awk 'FNR==NR{freq[$NF]++; next} freq[$NF] > 1' file{,} | sort -k4
你很接近。您需要跳过最后一个字段之前的字段
$ sort -k4 file | uniq -f3 -D
1 3 6 name1
3 4 2 name1
1 2 7 name2
7 8 2 name2
重复总是只发生两次吗?不,重复可以发生在不同的时间。我的尝试更让人困惑。使用GNU grep:
sort-k4,4文件| grep-Poz'([0-9]+){3}([^]+)\n([0-9]+){3}\2\n)+'
$ sort -k4 file | uniq -f3 -D
1 3 6 name1
3 4 2 name1
1 2 7 name2
7 8 2 name2