1

我想在 bash 命令行中执行以下操作...

我有 2 个文件。File1 看起来像。

585 1504    13  10000   10468   ID1
585 3612    114 10468   11447   ID2
585 437     133 11503   11675   ID1

File2 看起来像。

400220  10311    10311 
400220  11490    11490 
400220  11923    11923 

对于 File2 第 2 列中的每个数字,我想知道它是否在 File1 第 4 列和第 5 列中的任何数字对之间并创建 File3.txt,其输出如下...

如果是,我想将 File2 中的第 2 列和 File1 中的第 6 列写入 File3。如果不是,我想将 File2 中的第 2 列和字符串“NoID”写入 File3。所以对于示例数据 File3.txt 应该是这样的。

10311   ID1
11490   NoID
11923   NoID

我习惯于在 Python 中工作,在那里我会使用嵌套的 for 循环和 if 语句编写脚本,但我更愿意为此使用 Bash(我仍然是一个相对初学者)。在我看来,使用类似的嵌套循环方法结合 awk 和其他条件语句可能是要走的路。任何人都可以用示例语法提出好主意吗?

注意。实际文件包含超过 300 万行数据

提前欢呼

4

1 回答 1

3
awk 'NR==FNR{f[NR]=$4;l[NR]=$5;id[NR]=$6;next}{for(i in id){if($2>f[i]&&$2<l[i]){printf "%-8s%s\n",$2,id[i];next}}printf "%-8s%s\n",$2,"NoID"}' file1 file2

输出:

10311   ID1
11490   NoID
11923   NoID
于 2013-09-17T16:09:21.867 回答