linux,逗号分隔的单元格到行保留/聚合列

标签 linux bash unix

这里有一个类似的问题,但对于 excel/vba Excel Macro - Comma Separated Cells to Rows Preserve/Aggregate Column 因为我有一个大文件(> 300mb)这不是一个选项,因此我正在努力让它在 bash 中工作。

基于这些数据

 1   Cat1                 a,b,c
 2   Cat2                 d
 3   Cat3                 e
 4   Cat4                 f,g

我想将其转换为:

 1   Cat1                 a
 1   Cat1                 b
 1   Cat1                 c
 2   Cat2                 d
 3   Cat3                 e
 4   Cat4                 f
 4   Cat4                 g

最佳答案

cat > data << EOF
1   Cat1                 a,b,c
2   Cat2                 d
3   Cat3                 e
4   Cat4                 f,g
EOF

set -f                               # turn off globbing
IFS=,                                # prepare for comma-separated data
while IFS=$'\t' read C1 C2 C3; do    # split columns at tabs
    for X in $C3; do                 # split C3 at commas (due to IFS)
        printf '%s\t%s\t%s\n' "$C1" "$C2" "$X"
    done
done < data

关于linux,逗号分隔的单元格到行保留/聚合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6103480/

相关文章:

c++ - 是 GCC 错误吗?

bash - 查找唯一的文件

linux - 以与 bash 脚本不同的用户身份运行命令

linux - 为什么 (ps -f) 不创建子 shell 而是创建一个单独的进程?

Java Unix 字符编码

php - 在 Linux 上将 php 文件放在后台

c - nm 命令输出中的奇怪符号名称

linux - 使用 ls 进行管道传输时,grep 命令在 solaris 中不起作用

linux - 在 bash 脚本中结合 sed 和 sort 命令

c - 在系统命令中使用来自命令行的参数