这是我的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