如果满足条件,则比较列的所有值

时间:2013-06-25 01:08:27

标签: awk

我有一个包含4列的文件。第2列和第4列有数字。

a 55  k 3
b 59 l 3
c 79 m 277
d 255 n 277
e 257 o 267
f 267 p 287
g 290  q 287
h 290 r 287
i 310 s 900

我需要将第2列的所有行与第4列中的行进行比较,而不仅限于相同的行,并且仅选择第4列中的那些行,其中第4列中的值大于第2列中的值。例如,还将选择第4列中的第3行,因为它与第4,5,6行第2列中的值具有相同范围的差异。满足上述条件的样本文件的可能输出可能如下所示。

m 277
n 277
o 267
p 287
q 287
r 287

很抱歉,如果我没有清楚地表达我的问题,请提前谢谢。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你想要

awk '{for(i=1;i<=30;++i) feasible[i+$2]=1;} {val[NR] = $4; letter[NR] = $3} END {for(y in val) if(feasible[val[y]]) print letter[y], val[y]}'

基本上,您可以跟踪第四列的所有可行值。您还可以跟踪第三和第四列数据。然后,最后,检查每个值并查看它们是否可行