首页 > 解决方案 > Bash - 转置单个字段,保持其余部分相同并重复

问题描述

我有一个带有管道分隔字段的文件。例如。

1,2,3|xyz|abc

我需要以下格式的输出:

1|xyz|abc
2|xyz|abc
3|xyz|abc

我在 bash 中有一个工作代码:

while read i
do
    f1=`echo $i | cut -d'|' -f1`
    f2=`echo $i | cut -d'|' -f2-`
    echo $f1 | tr ',' '\n' | sed "s:$:|$f2:" >> output.txt
done < pipe_delimited_file.txt

任何人都可以建议一种使用循环来实现这一点的方法。该文件包含大量记录。

标签: bash

解决方案


使用循环,但它在 awk 内部,非常快:

awk -F\| 'BEGIN{OFS="|"}{n = split($1, a, ","); $1=""; for(i=1; i<=n; i++) {print a[i] $0}}' pipe_delimited_file.txt

推荐阅读