我刚刚开始使用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
答案 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