Bash 将单个逗号分隔的列转换为多行字符串

标签 bash awk sed multiple-columns

在我的输入文件中,列以制表符分隔,每列中的值以逗号分隔。

我想打印第一列,第二列的每个逗号分隔值。

Mary,Tom,David   cat,dog
Kevin   bird,rabbit
John    cat,bird
...

对于第二列中的每条记录(例如 cat,dog )我想拆分 记录到 [ cat, dog ] 数组中并交叉打印 第一栏。给出输出(仅针对这一行)

Mary,Tom,David   cat
Mary,Tom,David   dog

整个文件的输出应该是:

Mary,Tom,David   cat
Mary,Tom,David   dog
Kevin   bird
Kevin   rabbit
John    cat
John    bird
...

如果我想使用 awk 或 sed,有什么建议吗?

最佳答案

用 awk

awk '{split($2,a,",");for(i in a)print $1"\t"a[i]}' file

用逗号分割第二列,然后对于每个分割值,打印第一列和那个值

也在sed中

sed ':1;s/\(\([^\n]*\t\)[^\n]*\),\{1,\}/\1\n\2/;t1' file

关于Bash 将单个逗号分隔的列转换为多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33408762/

相关文章:

linux - 如何使用编号菜单获得 Linux 自动完成功能?

Linux - awk 选择

linux - 从 Linux 文件中删除特定的特殊字符串

linux - 来自 shell 输入的文件中的 awk 范围

linux - 使用 sed 意外更改文件

linux - 使用带有数字后缀但没有开始为零的输出文件拆分文件

perl - 在后台执行,但限制执行次数

Bash 按数字顺序对逗号分隔的列进行排序,然后按字母顺序排序

bash - SED 错误地仅替换一行中模式的第一个实例

regex - sed:具有逆向先行匹配的嵌套组