【发布时间】:2017-11-10 02:59:40
【问题描述】:
我正在尝试跨行比较第 2 列中的值与第 3 列中的值。比较不在同一行的第 2 列和第 3 列中的值之间。 比较条件为:
(1) 一行col2中的值与另一行col 3中的值进行比较,当这些行在第1列中具有相同的字符串时。
(2) 仅当第 1 列中的字符串至少重复两次时进行比较。
(3) 当两行在第 1 列中具有相同的字符串时,第 2 列中的值大于不同行中第 3 列中的值。
一个示例输入文件是:
约翰 0 100 约翰 120 200 史密斯 1 400 克拉丽丝 300 500 克拉丽丝 510 700 克拉丽丝 300 500 德克斯特 10 400 德克斯特 100 300 山姆 200 300 山姆 310 500 汤姆 100 300 布鲁斯 200 500 布鲁斯 520 900期望的输出
约翰 0 100 约翰 120 200 克拉丽丝 300 500 克拉丽丝 510 700 克拉丽丝 300 500 山姆 200 300 山姆 310 500 布鲁斯 200 500 布鲁斯 520 900不打印 col1 中带有“dexter”的行。 'dexter' 出现在两行中,但 col 2 中的值小于 col3 中其他行中的值,即 10 小于 300 且 100 小于 400。而带有 'bruce' 的行被打印,因为:因为 bruce 的第二行在 col 2 中有 520,大于在另一行 col3 中的 500。
我用 awk 试过了,下面是一个例子。看起来我无法弄清楚在另一行中将 col2 与 col3 进行比较,它们在 col1 中具有相同的字符串
awk -F "\t" 'NR==FNR{a[$1]++; b[$1]=$2; c[$1]=$3;next} {for (i in b) if (a[$1] >2 && b[i]>c[i] ) print}' test.file test.file
我也尝试过分步进行,首先只打印重复的行,然后比较相关的值。 我无法弄清楚如何比较与同一字符串关联的值。
【问题讨论】:
-
你为什么在命令行上两次处理你的test.file?我不明白哪个规则将 dexter 排除在外!?您写道:第 2 列中的值大于第 3 列中的值,但在您的示例中,我没有看到与此匹配的一行。
-
我明白你为什么把文件放了两次,但是@F.Hauri 的其他问题非常重要:哪个规则可以让 dexter 排除在外? 和“你写道:值第 2 列中的值大于第 3 列中的值,但在您的示例中,我没有看到与此匹配的一行。"
-
要打印第 1 列中至少重复两次的字符,使用数组,我将文件传递了两次。我同意还有更多的方法。很抱歉在原始问题中不清楚。我需要跨行比较第 2 列和第 3 列中的值,前提是它们与第 1 列中的相同字符串相关联。
-
不够清楚
-
是的,我的意思是与同一个字符串相关联。抱歉,我最初的问题不清楚。