awk三重文件输入

时间:2015-07-26 08:43:16

标签: linux unix awk

我有3个文件,如下所示:

File1:

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,{{1} }和10

需要检查 File1 中的2是否等于$23,如果是,则将2025转换为 $ 21 * 1000 ,然后在数组中保存$ 1。 之后,从我们从 File1 获取的$21 File2 获取$2

现在我们应该将 File1 中的$1 File3 中的$21进行比较,如果值大于或等于,则从打印$ 1文件1

上述文件的预期输出:

$2

我尝试过以下代码:

8755

但输出始终为 File3

请告知。

2 个答案:

答案 0 :(得分:2)

您遇到的问题来自于您将,-都计为字段分隔符。此外47 file1中的-字段非常令人困惑,因为在实际示例中,只有25个字段(甚至将awk -F'[,-]' 'NF==25{ if($23==2025) $21=$21*1000; A[$1]=$21 } NF==10{ B[$2]=$1 } NF==2{ if(A[B[$1]]>=$2) print B[$1]}' file1 file2 file3 计为字段分隔符)。无论如何,从你的问题中提取你应该写的文件

8755

结果:

NF==25

根据您的实际案例情况,将NF==47更改为<img width:"300px" height="400px" height="class="lazy" data-original="../'.$image .'" alt="Mural Image"/>';

答案 1 :(得分:1)

试试这个:

awk -F',' '
    NF == 47 { A[$1] = $23 ~ /2025/ ? $21*1000 : $21 }
    NF == 10 { B[$2] = $1 }
    NF == 2 && A[B[$1]] >= $2 { print B[$1] }'