Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于数字范围连接不同文件中的字段_Bash_Perl_Awk_Range - Fatal编程技术网

Bash 基于数字范围连接不同文件中的字段

Bash 基于数字范围连接不同文件中的字段,bash,perl,awk,range,Bash,Perl,Awk,Range,我有三个文件,大部分信息相似,但有一个唯一的字段。我想把这些合并成一个文件。这些文件的共同点是标题为hs的列和标题为range1和range2的列。不同的列是标有f1c、f2c和f3c的列。我想根据range1和range2中重叠的区域组合文件(在这种情况下,hs列也必须匹配) 它的范围类似于两个小节,bar1(hs1)有350个小节,bar2(hs2)有700个小节。f1c f2c和f3c下的值都符合任一条上这些部分的一定数量。对于适合同一部分的值,我想将它们列在一起 bash、awk或per

我有三个文件,大部分信息相似,但有一个唯一的字段。我想把这些合并成一个文件。这些文件的共同点是标题为hs的列和标题为range1和range2的列。不同的列是标有f1c、f2c和f3c的列。我想根据range1和range2中重叠的区域组合文件(在这种情况下,hs列也必须匹配)

它的范围类似于两个小节,bar1(hs1)有350个小节,bar2(hs2)有700个小节。f1c f2c和f3c下的值都符合任一条上这些部分的一定数量。对于适合同一部分的值,我想将它们列在一起

bash、awk或perl中的任何一种解决方案都可以工作,我只是不确定如何根据范围匹配这些内容

下面是一个文件示例

第一文件格式

hs f1c范围1范围2
hs1 p32 0 200
hs1 p31 200 300
hs1 p30 300 350
hs2 p32 0 300
hs2 p31 300 500
hs2 p30 500 700
第二文件格式

f2c hs范围1范围2
DDX11L1 hs1 20 50
FAM41C hs1 50 70
WASH7P hs1 70 120
FAM138A hs1 180 250
或4F5 hs2 0 50
KLHL17 hs2 50 100
PLEKHN1 hs2 100 150
LOC729737 hs2 300 500
HES4 hs2 500 600
ISG15高铁2 600 700
第三种文件格式

hs范围1范围2 f3c
HS10200-1
HS1200350-2
高铁25000-1
高铁2 500 700-2
以下是所需输出的示例(如果file2中没有在范围内的值,则f2c下有一个n)

hs f1c f2c范围1范围2 f3c
hs1 p32 n 0 20-1//来自文件3的第1行和文件1的第1行
hs1 p32 DDX11L1 20 50-1//来自文件1的第1行、文件2的第1行和文件3的第1行
hs1 p32 FAM41C 50 70-1//来自文件1的第1行、文件2的第2行和文件3的第1行
hs1 p32 WASH7P 70 120-1//1号线文件1、3号线文件2、1号线文件3
hs1 p32 n 120 180-1//1号线文件1,1号线文件3
hs1 p32 FAM13BA 180 200-1//1号线文件1、4号线文件2、1号线文件3
hs1 p31 FAM13BA 200 250-2//第二行文件1、第四行文件2、第二行文件3
hs1 p31 n 250。300-2//2行文件1,2行文件3
hs1 p30 n 300 350-2//3号线文件1,2号线文件3
hs2 p32或4FS 0 50-1
hs2 p32 KLHL17 50 100-1
hs2 p32 PLEKHN1 100 150-1
hs2 p32 n 150 300-1
hs2 p31 LOC729737 300 500-1
hs2 p30 HES4 500 600-2
hs2 p30 ISG15 600 700-2

谢谢你

我写这篇文章是为了帮助你,但是你需要明白,在一个免费提供诊断帮助的网站上,你的问题是不可接受的。你不能简单地提出你的需求,然后等待一个高质量的免费解决方案出现。我写了一个答案,只是因为这是我的国家的一个银行假日,这个问题让我感兴趣

我在这方面比你在写问题时付出了更多的努力,你甚至没有回答别人在评论中问你的几个问题

使用严格;
使用“全部”警告;
使用自动模具;
使用Readonly::微小的“Readonly”;
只读my@FILES=>qw/file1.txt file2.txt file3.txt/;
只读我的$FORMAT=>“%-6s%-6s%-10s%-5d%-5d%d\n”;
只读my@OUTPUT=>qw/hs f1c f2c range1 range2 f3c/;
只读我的@KEY_列=>qw/hs范围1范围2/;
我的%data;#每个'hs'值的所有数据
我的%bounds;#对于'hs'的每个值,'range1'或'range2'的所有值
我的%heads;#在任何文件中找到的所有标题
#从每个文件中,读取标题行并使用
#标题作为代表每行的数据哈希的键
#
对于我的$file(@FILES){

打开我的$fh,“我写这篇文章是为了帮助你,但是你需要明白,在一个提供免费诊断帮助的网站上,你的问题是不可接受的。你不能简单地提出你的要求,然后等待高质量的免费解决方案出现。我写这个答案只是因为在我的国家,这是一个银行假日,我对这个问题感兴趣

我在这方面比你在写问题时付出了更多的努力,你甚至没有回答别人在评论中问你的几个问题

使用严格;
使用“全部”警告;
使用自动模具;
使用Readonly::微小的“Readonly”;
只读my@FILES=>qw/file1.txt file2.txt file3.txt/;
只读我的$FORMAT=>“%-6s%-6s%-10s%-5d%-5d%d\n”;
只读my@OUTPUT=>qw/hs f1c f2c range1 range2 f3c/;
只读我的@KEY_列=>qw/hs范围1范围2/;
my%data;#每个'hs'值的所有数据
my%bounds;#对于'hs'的每个值,'range1'或'range2'的所有值
我的%heads;#在任何文件中找到的所有标题
#从每个文件中,读取标题行并使用
#标题作为代表每行的数据哈希的键
#
对于我的$file(@FILES){

打开我的$fh,'您有很多示例输入和输出,但没有代码!您编写的代码在哪里?有什么问题?请参阅:并显示所需输出文件的标题。您尝试了什么?您遇到了什么问题?请显示您的代码(如果您还没有任何代码,那么堆栈溢出可能是问您问题的错误地方)。实际文件有多大?@agc:它应该是
hs f1c f2c range1 range2 f3c
。OP还忽略了说如果第二个文件中没有该范围的值,那么
f2c
列应该设置为
n
。您有很多示例输入和输出,但没有co