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

Awk 如果满足条件,则比较列的所有值,awk,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 55k3 b 59 l 3 c 79M 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列的文件。第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 55k3 b 59 l 3 c 79M 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列中的值在1到30的范围内大于第2列中的值。例如,第4列中的第3行也将被选中,因为它与第4、5、6行中第2列的值在相同范围内存在差异。满足上述条件的示例文件的可能输出如下所示

m 277 n 277 o 267 p 287 q 287 r 287 m 277 n 277 o 267 第287页 问题287 r 287
对不起,如果我没有清楚地说明我的问题,请提前谢谢

如果我理解正确,您需要

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]}'

awk'{for(i=1;i如果我理解正确,您需要

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]}'

awk'{for(i=1;iNice solution,假设数字不会变得太大=)@paddy如果这是一个问题,你可以只存储值并显式计算差异。但是这需要一个嵌套循环。+1我同意@Barmar。我在读了
我有一个文件…
@Barmar和JS后迷路了웃, 很抱歉,这本书读起来很枯燥,我意识到它很草率。很好的解决方案,前提是数字不会变得太大=)@paddy如果这是一个问题,您可以只存储值并显式计算差异。但是这需要一个嵌套循环。+1我同意@Barmar。我在阅读
后丢失了一个文件…
@Barmar和JS웃, 对不起,这本书读起来确实很乏味,我意识到它很草率。