awk能够同时对两个文件进行读取,除了使用paste,通过“NR==FNR”我们可以对两个文件中的内容逐行合并:
$cat file1 chr 1 chr 2 chr 3 chr 4 chr 5 chr 6
$cat file2 34 69 256 890 135 568 12 39 33 80 18 90
$awk 'FNR==NR{a[FNR] =$0; next} {print a[FNR]"\t"$0}' file1 file2 chr 1 34 69 chr 2 256 890 chr 3 135 568 chr 4 12 39 chr 5 33 80 chr 6 18 90
FNR把每个文件作为一个独立的个体进行行计数,NR则把两个文件看做整体计数,即在FNR中行数被读为:1,2,3,1,2,3...;而NR的计数方法则为1,2,3,4,5,6...
next表示执行下一行。
同样,我们可以通过awk将两个文件中首尾相接的行合并在一起:
$cat file1 chr 1 chr 2 chr 3 chr 4 chr 5 chr 6
$cat file2 1 69 2 890 3 568 3 688 4 39 5 80 6 90
$awk 'FNR==NR{t[$2]=$0; next}{print t[$1]"\t"$2}' file1 file2 chr 1 69 chr 2 890 chr 3 568 chr 3 688 chr 4 39 chr 5 80 chr 6 90
上述操作相当于把file1中的内容存放入一个数组,第二列的内容作为数组下标,再file2中通过数组下标把对应的元素打印出来。
参考:https://www.cnblogs.com/tyjs09/p/14185053.html
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!