bash - 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
任何人都可以建议一种使用循环来实现这一点的方法。该文件包含大量记录。
解决方案
使用循环,但它在 awk 内部,非常快:
awk -F\| 'BEGIN{OFS="|"}{n = split($1, a, ","); $1=""; for(i=1; i<=n; i++) {print a[i] $0}}' pipe_delimited_file.txt
推荐阅读
- r - 不返回 R 中的绘图和表格闪亮
- javascript - 如何迭代地获取特定的 JSON 数据并显示为 HTML
- python - 如何更改梅尔谱图的大小?
- java - firebase 用户在重新启动应用程序时为空
- primefaces - 如何根据数据库中的值显示捆绑文件中的 h:outputText 值?
- python-3.x - 为什么python返回字符串的时差不计算差异?
- javascript - 无法使用 AJAX 将我的 Javascript 变量传递给 PHP
- reactjs - React Table - 无法访问单元格中的嵌套 JSON 对象
- c# - 创建菜单目录和菜单管理表单 C#
- java - 由于在现有项目中导入了特定的库,因此在 Eclipse 中无法解决导入问题