如何通过awk合并两个文件

如何通过awk合并两个文件

这是我的1.file

             id
             a1
             a2
             a3
             a4

这是我的2.file

             DW  1  2  3  4
             KD  2  3  4  5
             LBJ 4  4  4  4

我想要得到我的最终文件

             id  a1 a2 a3 a4
             DW  1  2  3  4
             KD  2  3  4  5
             LBJ 4  4  4  4
            

我尝试

cat 1.file |tr "\n" "\t"|sed -e 's/,$/\n/'

进而

cat 1.file 2.file >> fina.file

但我想找到awk

答案1

$ column -t <( paste -s 1.file ) 2.file
id   a1  a2  a3  a4
DW   1   2   3   4
KD   2   3   4   5
LBJ  4   4   4   4

的行1.file通过 转变成单行标题paste -s,然后column -t用于将这些标题与 中的数据对齐2.file

上面假设您使用的 shell 能够理解进程替换<(...)。如果不是,请改用以下内容:

paste -s 1.file | column -t /dev/stdin 2.file

答案2

假设I want to get the awk way您的意思是您想学习如何在一个 awk 脚本中完成所有操作:

$ awk 'NR==FNR{ hdr=hdr sep $0; sep=OFS; next} FNR==1{ print hdr } 1' 1.file 2.file
id a1 a2 a3 a4
DW  1  2  3  4
KD  2  3  4  5
LBJ 4  4  4  4

答案3

类似的东西可以完成这项工作:

awk '{ORS=(NR%5?FS:RS)}1' 1.file >final.file
cat 2.file >>final.file

awk代码将 5 个连续行打印为一行。然后cat添加文件的其余部分

答案4

保留缩进:

cat <( fmt 1.file ) 2.file
             id a1 a2 a3 a4
             DW  1  2  3  4
             KD  2  3  4  5
             LBJ 4  4  4  4

相关内容