繁体   English   中英

如何使用Bash-嵌套循环查看file1列中的数字是否在file2列中的数字之间?

[英]How to see if number in column from file1 is between numbers from columns in file2 using Bash - nested loops?

我想在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万行数据

提前加油

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM