如何仅获取 bash 中特定列的重复行

How to obtain only repeated lines for a specific column in bash

假设我在 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,4 myfile | uniq -D,但我找不到如何告诉 uniq 使用第 4 列。 谢谢!

能否请您尝试以下。

awk '
{
  a[$NF]++
  b[$NF]=(b[$NF]?b[$NF] ORS:"")[=10=]
}
END{
  for(i in a){
    if(a[i]>1){
      print b[i]
    }
  }
}
'  Input_file

或者,如果您想对输出进行排序,请尝试以下操作。

awk '
{
  a[$NF]++
  b[$NF]=(b[$NF]?b[$NF] ORS:"")[=11=]
}
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

1 3 6 name1
3 4 2 name1
1 2 7 name2
7 8 2 name2

你很接近。您需要跳过最后一个之前的字段。

$ sort -k4 file | uniq -f3 -D
1 3 6 name1
3 4 2 name1
1 2 7 name2
7 8 2 name2