如何解决在第二个文件中的一列之后添加一个文件中的列,同时考虑到两个文件具有不同的列数
文件 1
001 00A 892 J27
002 00G 742 M65
003 00B 934 B32
004 00J 876 K57
005 00k 543 N21
文件 2 有 1,628,433 列,但是,想在此文件的第一列之后添加文件 1 中的所有四列。
a 2 T ..........
b 3 C ..........
c 4 G ..........
d 5 A ..........
e 6 B ..........
期望的输出
a 001 00A 892 J27 2 T ..........
b 002 00G 742 M65 3 C ..........
c 003 00B 934 B32 4 G ..........
d 004 00J 876 K57 5 A ..........
e 005 00k 543 N21 6 B ..........
尝试了以下
awk 'NR==FNR{a[FNR]=$1,$2,$3,$4} {print $1,a[FNR],$5}' file2 file1
解决方法
这个版本在内存上更轻: 它一次只从每个文件中读取一行:
awk '{getline f1 < "file1"; $1 = $1 OFS f1; print}' file2
,
$ paste -d' ' <(cut -d' ' -f1 file2) file1 <(cut -d' ' -f2- file2)
a 001 00A 892 J27 2 T ..........
b 002 00G 742 M65 3 C ..........
c 003 00B 934 B32 4 G ..........
d 004 00J 876 K57 5 A ..........
e 005 00k 543 N21 6 B ..........
,
对于您显示的示例,请尝试遵循 awk
代码。
awk 'FNR==NR{arr[FNR]=$1;next} {$1=$1 OFS arr[FNR]} 1' file2 file1
说明: 简单的说明是,在读取 file2 时使用 FNR==NR
条件。创建具有行号索引的数组,并将第一个字段作为其中的值。在读取 file1 时,将当前行的等效数组的值保存到第一个字段中,然后在那里打印当前行。
这是一个python,一次处理一行输入文件:
python3 -c '
import sys
with open(sys.argv[1]) as f1,open(sys.argv[2]) as f2:
for l1,l2 in zip(f1,f2):
lf1,lf2=map(str.split,[l1,l2])
print(" ".join([lf2[0]]+lf1+lf2[1:]))
' file1 file2
,
awk -F'\t' -v OFS="\t" '{getline f1 < "file1"; $1 = $1 OFS f1; print}' file2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。