bash - 使用 awk 或 sed 基于无关列创建新行

标签 bash awk sed

我有一个看起来像这样的文件(列由制表符分隔):

Owner    Phone    Car
Dan    111-111-1111    Avalon    Camry
Stacy    222-222-2222    Corolla    Yaris    Camry
Henry    333-333-3333    Prius

我希望所有额外的汽车都位于原始汽车下方的自己的行上(为每辆额外的汽车复制车主和电话信息),所以它看起来像这样:

Owner    Phone    Car
Dan    111-111-1111    Avalon
Dan    111-111-1111    Camry
Stacy    222-222-2222    Corolla        
Stacy    222-222-2222    Yaris
Stacy    222-222-2222    Camry
Henry    333-333-3333    Prius

我想知道是否有一种方法可以使用 awk 或 sed(最好是单行代码)来实现。

最佳答案

使用 awk,您可以遍历从 3 到结束的字段,并将它们与字段 12< 一起打印:

awk '{for(i=3;i<=NF;i++){print $1,$2,$i}}' file

顺便说一句,如果您希望输出看起来很好地对齐,您可以通过管道传输到 column 命令:

awk '{for(i=3;i<=NF;i++){print $1,$2,$i}}' file | column -t

关于bash - 使用 awk 或 sed 基于无关列创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802428/

相关文章:

linux - 字符串查找并用 sed 替换

linux - 在 linux 上使用 AWK 写一个文件

linux - 在 Bash 变量中转义 awk 参数

linux - 从文本文件第一行的开头删除匹配的模式

regex - sed strip 将混合文本引导至某个字符

bash - 拒绝 sudo 用户访问特定文件夹

linux - 对文件夹中的所有文件运行命令的 Bash 脚本失败

linux - 无法为 docker 容器执行脚本?

bash - 如何让 bash 脚本循环直到特定时间

regex - 使用 sed 进行变量字符串转换