awk同时读取两个文件

awk使用NR==FNR同时读取两个文件
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

  • 发表于 2023-12-18 17:00
  • 阅读 ( 385 )
  • 分类:linux

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
每天学习一点点
每天学习一点点

32 篇文章

作家榜 »

  1. omicsgene 658 文章
  2. 安生水 328 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. 红橙子 78 文章
  6. CORNERSTONE 72 文章
  7. xun 68 文章
  8. rzx 67 文章