我有 10 个数据字段,其中包含冗余和非冗余数据。我想 grep/sed/awk/uniq/whatever 来制作一个非冗余列表。
具体来说,我想消除在字段 4、6、7 和 8 中具有相同条目的条目。但是我需要保留这些条目中的一个(第一个)。
这里和示例输入
1, 3972361, 4u5p_1, blb, A, 47, 50, PKET, 1.78, 3
1, 3972365, 4u5p_1, al3, A, 91, 94, APFI, 1.78, 6
1, 3972372, 4u5p_1, blb, B, 47, 50, PKET, 1.78, 3
1, 3972376, 4u5p_1, al3, B, 91, 94, APFI, 1.78, 6
1, 3972387, 4u5p_1, al3, C, 91, 94, APFI, 1.78, 6
2, 3972361, 4u5p_1, blb, A, 47, 50, PKET, 1.78, 4
2, 3972365, 4u5p_1, al3, A, 91, 94, APFI, 1.78, 6
2, 3972372, 4u5p_1, blb, B, 47, 50, PKET, 1.78, 4
2, 3972376, 4u5p_1, al3, B, 91, 94, APFI, 1.78, 6
2, 3972387, 4u5p_1, al3, C, 91, 94, APFI, 1.78, 6
这是一个示例输出
1, 3972361, 4u5p_1, blb, A, 47, 50, PKET, 1.78, 3
1, 3972365,4u5p_1, al3, A, 91, 94, APFI, 1.78, 6
这只是一个示例,有时这些条目中只有一个不同,必须保留在最终输出中。
非常感谢!
最佳答案
做:
awk -F "[ ,]+" '!a[$4$6$7$8]{a[$4$6$7$8]=$0} END{for (i in a) print a[i]}' file
!a[$4$6$7$8]
检查数组a
是否不包含由要检查的所需字段组成的 key如果 key 不存在,
{a[$4$6$7$8]=$0}
运行,即创建一个数组元素,其中所需的字段作为键,整个记录作为值最后,
END{for (i in a) print a[i]}
打印数组a
的值
示例:
% cat file.txt
1, 3972361, 4u5p_1, blb, A, 47, 50, PKET, 1.78, 3
1, 3972365, 4u5p_1, al3, A, 91, 94, APFI, 1.78, 6
1, 3972372, 4u5p_1, blb, B, 47, 50, PKET, 1.78, 3
1, 3972376, 4u5p_1, al3, B, 91, 94, APFI, 1.78, 6
1, 3972387, 4u5p_1, al3, C, 91, 94, APFI, 1.78, 6
2, 3972361, 4u5p_1, blb, A, 47, 50, PKET, 1.78, 4
2, 3972365, 4u5p_1, al3, A, 91, 94, APFI, 1.78, 6
2, 3972372, 4u5p_1, blb, B, 47, 50, PKET, 1.78, 4
2, 3972376, 4u5p_1, al3, B, 91, 94, APFI, 1.78, 6
2, 3972387, 4u5p_1, al3, C, 91, 94, APFI, 1.78, 6
% awk -F "[ ,]+" '!a[$4$6$7$8]{a[$4$6$7$8]=$0} END{for (i in a) print a[i]}' file.txt
1, 3972365, 4u5p_1, al3, A, 91, 94, APFI, 1.78, 6
1, 3972361, 4u5p_1, blb, A, 47, 50, PKET, 1.78, 3
关于bash跨多个字段查找非冗余数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083933/