【问题标题】:read different fields and pass on to awk to extract those fields读取不同的字段并传递给 awk 以提取这些字段
【发布时间】:2016-11-18 22:13:15
【问题描述】:

这可能在某个地方得到了回答,但我探索的东西不符合我的需要。

我想从一个文件 (FILE1) 中读取不同的字段并将其传递给 awk 脚本,该脚本可以从另一个文件 (FILE2) 中提取这些字段。

文件1

1   156202173   156702173
2   26915624    27415624
4   111714419   112214419

从该文件中读取行并将其传递给以下脚本

awk ' BEGIN {FS=OFS="\t"};
{if ($1==$1 && $2>= $2 && $2<= $3 ) {print $0}}' FILE2 > extracted.file

FILE2 看起来像这样;

1   156202182   rs7929618
16  8600861 rs7190157
4   111714800   rs12364336
12  3840048 rs4766166
7   20776538    rs35621824

因此,awk 脚本仅在与第一个字段匹配且值介于第二个和第三个字段之间时打印。 预期输出是

1   156202182   rs7929618
4   111714800   rs12364336

非常感谢您的回复。

【问题讨论】:

  • 似乎将数据存储在数据库中并通过 SQL 查询将是一个很好的解决方案,尤其是在您拥有大量数据的情况下。

标签: linux bash awk


【解决方案1】:

应该有很多类似的问题,但是写脚本比查找要快。

$ awk 'NR==FNR{lower[$1]=$2; upper[$1]=$3; next} 
       lower[$1]<$2 && $2<upper[$1]' file1 file2

1   156202182   rs7929618
4   111714800   rs12364336

【讨论】:

  • 非常感谢您的输入,它就像一个魅力..如果匹配的第一个字段位于源文件的不同列中怎么办..我想 NR==FNR 可能不起作用案例...
  • NR==FNR 用于处理第一个文件,与字段无关。如果匹配字段索引不是 1,则相应更改。
猜你喜欢
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2012-01-14
  • 2014-08-14
  • 2021-11-19
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多