Bash:垂直显示CSV

时间:2016-12-22 12:20:00

标签: shell csv

我试图通过切换行和列来显示一些CSV文件,以便:

a,b,name
20,10,"Hello World"

看起来像:

a,20
b,10
name,"Hello World"

例如在Sqlite中,可以使用pivot clause,但我正在寻找更通用而不是SQL特定的东西。

有没有一种简单的方法可以通过在给定的分隔符(这里,)中拆分行来将行转换为列?

1 个答案:

答案 0 :(得分:1)

#!/bin/bash
#########################################
# Matrix transpose with Awk
#
# Usage: matrixT file fs ofs
# The last two arguments are optional
#
# Kent
# 2011-07-07
#
#########################################
fs=${2:-" "}
ofs=${3:-" "}
file=$1

awk  -v FS="$fs" -v OFS="$ofs" '{for (i=1;i<=NF;i++) a[i,NR]=$i; }END{
    for(i=1;i<=NF;i++) {
        for(j=1;j<=NR;j++)
            printf "%s%s", a[i,j], (j==NR? ORS:OFS);
    } 
}' "$file"

有时我也经常这样做,所以我写了一个脚本(见上文)。

你可以这样做:

theScript.sh file ","  ","