使用 awk 如何打印包含特定列重复项的所有行?
Using awk how do I print all lines containing duplicates of specific columns?
输入:
a;3;c;1
a;4;b;2
a;5;c;1
输出:
a;3;c;1
a;5;c;1
因此,所有与第 1,3 和 4 列重复的行都应该被打印出来。
试试这个单线:
awk -F';' '{k= FS FS }
NR==FNR{if(a[k]){p[a[k]];p[NR]}a[k]=NR;next}FNR in p' file file
它遍历文件两次,第一次,它标记了应该打印的行号,第二次打印这些行。
这是我的解决方案:
awk 'BEGIN{ FS=";" }NR==1{ split([=10=], a, ";"); print }NR>1{ if ( a[1] == && a[3] == && a[4] == ){ print }}'
输出:
a;3;c;1
a;5;c;1
当然只有当具有特定列的行是第一行时才有效。
如果 2 遍方法可行:
$ awk -F';' '{key= FS FS } NR==FNR{cnt[key]++;next} cnt[key]>1' file file
a;3;c;1
a;5;c;1
否则:
$ awk -F';' '
{ key= FS FS ; a[key,++cnt[key]]=[=11=] }
END {
for (key in cnt)
if (cnt[key] > 1)
for (i=1; i<=cnt[key]; i++)
print a[key,i]
}
' file
a;3;c;1
a;5;c;1
由于 in
运算符,第二个脚本中键的输出顺序将是随机的 - 如果这是一个问题,很容易修复。
输入:
a;3;c;1
a;4;b;2
a;5;c;1
输出:
a;3;c;1
a;5;c;1
因此,所有与第 1,3 和 4 列重复的行都应该被打印出来。
试试这个单线:
awk -F';' '{k= FS FS }
NR==FNR{if(a[k]){p[a[k]];p[NR]}a[k]=NR;next}FNR in p' file file
它遍历文件两次,第一次,它标记了应该打印的行号,第二次打印这些行。
这是我的解决方案:
awk 'BEGIN{ FS=";" }NR==1{ split([=10=], a, ";"); print }NR>1{ if ( a[1] == && a[3] == && a[4] == ){ print }}'
输出:
a;3;c;1
a;5;c;1
当然只有当具有特定列的行是第一行时才有效。
如果 2 遍方法可行:
$ awk -F';' '{key= FS FS } NR==FNR{cnt[key]++;next} cnt[key]>1' file file
a;3;c;1
a;5;c;1
否则:
$ awk -F';' '
{ key= FS FS ; a[key,++cnt[key]]=[=11=] }
END {
for (key in cnt)
if (cnt[key] > 1)
for (i=1; i<=cnt[key]; i++)
print a[key,i]
}
' file
a;3;c;1
a;5;c;1
由于 in
运算符,第二个脚本中键的输出顺序将是随机的 - 如果这是一个问题,很容易修复。