在第二个文件的列之后添加一个文件的列,同时考虑两个文件具有不同的列数

adding columns from one file after a column in a second file while considering the two files have different number of columns

文件 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]=,,,} {print ,a[FNR],}' file2 file1

使用您展示的示例,请尝试以下 awk 代码。

awk 'FNR==NR{arr[FNR]=;next} {= OFS arr[FNR]} 1' file2 file1

解释: 简单的解释就是,在读取file2时使用FNR==NR条件。创建具有行号索引的数组,并将第一个字段作为其中的值。在读取文件 1 时,将当前行的等效数组的值保存到第一个字段中,然后在那里打印当前行。

此版本内存更轻: 它一次只从每个文件中读取一行:

awk '{getline f1 < "file1";  =  OFS f1; print}' file2

这是一次一行处理输入文件的 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 
$ 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 -F'\t' -v OFS="\t" '{getline f1 < "file1";  =  OFS f1; print}' file2