我有两个文件:
一个是“total.txt”。它有两列:第一列是自然数(指标),范围从1到20,第二列包含随机数。
1 321
1 423
1 2342
1 7542
2 789
2 809
2 5332
2 6762
2 8976
3 42
3 545
... ...
20 432
20 758
另一个是“index.txt”。它有三列:(1.indicator,2:低值,3:高值)
1 400 5000
2 600 800
11 300 4000
我想输出“total.txt”文件的行,第一列匹配“index.txt”文件的第一列。同时,第二列输出结果必须大于(>)“index.txt”的第二列并且小于(<)“index.txt”的第三列。
预期结果如下:
1 423
1 2342
2 809
2 5332
2 6762
11 ...
11 ...
我试过这个:
awk '$1==(awk 'print($1)' index.txt) && $2 > (awk 'print($2)' index.txt) && $1 < (awk 'print($2)' index.txt)' total.txt > result.txt
但它失败了!
你能帮我解决这个问题吗?谢谢!
答案 0 :(得分:1)
您需要在同一awk
脚本中读取这两个文件。阅读index.txt
时,将其他列存储在数组中。
awk 'FNR == NR { low[$1] = $2; high[$1] = $3; next }
$2 > low[$1] && $2 < high[$1] { print }' index.txt total.txt
FNR == NR
是您在处理第一个文件时检测到的常见awk
习语。
答案 1 :(得分:0)
使用像Barmar这样的连接说:
# To join on the first columns
join -11 -21 total.txt index.txt
如果文件没有按第二列的词汇顺序排序,那么:
join -11 -21 <(sort -k1,1 total.txt) <(sort -k1,1 index.txt)