【发布时间】:2015-10-16 13:54:58
【问题描述】:
我有3个文件,如下:
文件1:
5372,5372,0,0,,1,0,1,1,0,1,0,0,0,0,0,0,1107,1107,,1.620000,1,2015-08-12,,,,,,,,,,,,,,,,,,,,,,,,
2110,2110,0,0,,0,0,1,0,0,0,0,1,1,1,1,1,1601,1601,,9.500000,1,2015-05-29,,,,,,,,,,,,,,,,,,,,,,,,
6900,6900,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1107,1107,,1.369000,1,2025-09-23,,,,,,,,,,,,,,,,,,,,,,,,
8755,8755,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1107,1107,,3.232000,1,2025-05-22,,,,,,,,,,,,,,,,,,,,,,,,
文件2:
5372,4074,,,,,2,,,
2110,4100,,,,,0,,,
6900,5246,,,,,0,,,
8755,5270,,,,,0,,,
文件3:
2187,2500
2188,1500
4227,2000
5270,3000
注意 File1、File2 和 File3 的 NF 分别是 47、10 和 2
需要检查File1中的$23是否等于2025,如果是,则将$21转换为$21*1000,然后将 $1 保存在数组中。
之后,从 File2 中获取 $2 以获取我们从 File1 中获取的 $1。
现在我们应该比较 File1 中的 $21 与 File3 中的 $2 如果值大于或等于,则从 File1打印 $1 >.
上述文件的预期输出:
8755
我已经尝试了以下代码:
awk -F"," '{
if (NF==47) {
if ($23 ~ /2025/) {$21=$21*1000}
{A[$1]=$0}
} else {
if (NF==10) {
if (A[$1]==$0) {B[$1]=$0}
}
{if (NF==2) {
B[$1]==$0 && $21>=$2
}
{print $0}
}
}'
但输出总是 File3
请指教。
【问题讨论】:
-
B[$1]==$0 && $23>=$2应该做什么?这是一个比较表达式,但它不在if( ...)内。 -
@Barmar .. 抱歉打错了,是$21>=$2,是比较File1中转换后的$21的值和File3,如果 $21>=$2,我需要从 File1 中获取 $1 用于该记录。
-
但它不在
if内,因此它对比较没有任何作用。 -
不应该是
if(B[$1]==$0 && $21>=$2) { do something }之类的吗? -
@Barmar 这是最后一个 if 语句的操作,不是吗?