我想根据多列中的匹配过滤行。我有(各种)4 列制表符分隔的文件。我需要检查第 1 列中的所有重复项,检查相应的第 4 列,如果值不同(即使仅出现一次)打印整行(4 列)。
这是输入的示例:
function-n such_as-handheld-n 6.4623 A
function-n such_as-hash-n 6.5328 A
party-n such_as-head-n 2.5586 A
function-n such_as-headphone-n 8.0794 B
function-n such_as-health-n 3.1938 A
party-n such_as-heartbeat-n 6.5902 B
party-n such_as-heat-n 3.9708 B
zebra-n at-1-aquatic-n 10.0476 B
zebra-n become-pelican-n 12.4166 B
zebra-n behind-idea-of-concept-n 16.0319 B
zebra-n move-lion-n 12.2017 B
zebra-n such_as-1-pole-n 8.9519 B
zebra-n try-reasoning-n 12.9504 B
zooplankton-n than-1-mangrove-n 12.0638 B
因此结果如下:
function-n such_as-handheld-n 6.4623 A
function-n such_as-hash-n 6.5328 A
party-n such_as-head-n 2.5586 A
function-n such_as-headphone-n 8.0794 B
function-n such_as-health-n 3.1938 A
party-n such_as-heartbeat-n 6.5902 B
party-n such_as-heat-n 3.9708 B
因为“function-n”和“party-n”是 Column1 中唯一在第 4 列中具有不同值的值。
我在此处使用 awk看到了有关基于多列丢弃行的帖子。代码(由@Steve 提出)如下:
FNR==NR {
array[$0]++
next
}
{
counter = 0
for (i in array) {
split(i, holder, FS)
if (holder[1] == $1) {
counter++
}
}
if (counter >= 2) {
print
}
}
$ awk -f script.awk file.txt{,}
这段代码完全符合我的需要,除了 2 列数据。我试图修改脚本的一部分来比较第 4 列,如下所示:
{
counter = 0
for (i in array) {
split(i, holder, FS)
if (holder[1] == $4) {
counter++
}
然而,它不起作用。谁能提供有关如何修改此脚本的见解,以便我可以达到预期的结果?
或者也许有人有更有效/优化的方式来处理问题?谢谢你。