我试图通过切换行和列来显示一些CSV文件,以便:
a,b,name
20,10,"Hello World"
看起来像:
a,20
b,10
name,"Hello World"
例如在Sqlite中,可以使用pivot clause,但我正在寻找更通用而不是SQL特定的东西。
有没有一种简单的方法可以通过在给定的分隔符(这里,
)中拆分行来将行转换为列?
答案 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 "," ","