【问题标题】:How to merge 2 rows into 1 row at the same column using awk如何使用awk将同一列的2行合并为1行
【发布时间】:2015-01-28 09:39:26
【问题描述】:

我刚开始使用 UNIX,也没有太多的脚本编写经验。现在我正在努力合并同一列的 2 行。以下是原始数据。 列分为 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

【问题讨论】:

  • 列对齐重要吗?

标签: linux unix awk


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2012-06-26
    • 2012-06-20
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    相关资源
    最近更新 更多