我有一个常量文件(File1)和50多个文件。我想将File1中的Chr与所有其他文件匹配,如果它是真的那么我想给条件开始> = Pos&&结束< Pos使用awk或bash脚本中的任何其他语言提取所有文件的内容。
这是一个例子。(为了简单起见,我这里只使用了两个文件)
File1(常量文件)
Satr End
1 86 99
5 1223 23455
6 56 100
File2
Chr Pos深度
1 87 0
1 88 1
1 89 1
1 90 1
1 92 2
1 93 3
2 23 1
2 24 1
输出
Chr Pos深度
1 87 0
1 88 1
1 89 1
1 90 1
1 92 2
1 93 3
请告诉我我该怎么办?
由于
答案 0 :(得分:1)
awk 'NR==FNR{s[$1]=$2;e[$1]=$3;next}$1 in s && $2 >s[$1] && $2 <e[$1]' file1 file2
这个单行程适用于您的示例(跳过标题行,您可以添加NR(orFNR)>1
)。你至少可以得到这个想法
输出:
kent$ awk 'NR==FNR{s[$1]=$2;e[$1]=$3;next}$1 in s && $2 >s[$1] && $2 <e[$1]' f f2
1 87 0
1 88 1
1 89 1
1 90 1
1 92 2
1 93 3
说明:
Assume the columns were separated by whitespace.
NR==FNR{s[$1]=$2;e[$1]=$3;next}
here for the first file (your file1), save two arrays, s[] (start) and e[] (end). the index is first column value.
$1 in s && $2 >s[$1] && $2 <e[$1]
for the 2nd file (your file2), each row, we print it out if 3 conditions were satisfied:
1) $1 should be an index in s[] (or e[] same here)
2) $2 > s[$1]
3) $2 < e[$1]