如何使用awk将2行合并到同一列的1行中

时间:2015-01-28 09:39:27

标签: linux unix awk

我刚刚开始使用UNIX,也没有太多的脚本编写经验。现在我正在努力将两行合并到同一列。以下是原始数据。 列被分成2行,但理想情况下应该是1行。 但我不知道该怎么做。

原始文件

User   Middle   Last  
Name   Name     Name
Htat   Ko       Lin
John   Smith    Bill

试图实现:

UserName   MiddleName   LastName  
Htat       Ko           Lin
John       Smith        Bill

谢谢! Htat Ko

1 个答案:

答案 0 :(得分:1)

这可以使用awk和for循环来完成

awk 'NR==1{for(i=1;i<=NF;i++)a[i]=$i;next}NR==2{for(i=1;i<=NF;i++)$i=a[i]$i}1' file

输出

UserName   MiddleName   LastName  
Htat       Ko           Lin
John       Smith        Bill

解释

NR==1  

如果记录号是1.即第一个记录然后执行下一个块

for(i=1;i<=NF;i++)

从一个循环到多个字段(NF)。每次递增一次。

a[i]=$i

使用i作为键,将数组a中的数组元素设置为字段i($i)。

next

略过所有进一步说明并转到下一条记录。

NR==2 

与之前相同但是对于记录2

for(i=1;i<=NF;i++)

与以前完全相同

$i=a[i]$i

将字段i设置为数组中的存储值,然后将其自身设置为

1

默认为true,因此除非使用了下一行,否则将打印所有行


附加说明

如果你想保持列的最简单,那就是把这个命令输入column -t

awk '...' file | column -t

缩减版

awk '{for(i=1;i<=NF;i++)(NR==2&&$i=a[i]$i)||a[i]=$i}NR>1' file