更新:在查看了 OP 帖子和更多代码后,我猜测所需的格式如下:
January:"3",February:"5",March:"6",April:"5",May:"4",June:"6",July:"7",August:"6",September:"4",October:"4",November:"3",December:"3",
如果是这种情况,我们可以使用相同的解决方案(如下),并通过tr 将最终结果转置回单行/多列数据集,例如:
$ paste -d" " <(locale mon | tr ';' '\n') <(tr ',' '\n' < data.csv) | grep -v '^ $' | tr ' \n' ':,'
January:"3",February:"5",March:"6",April:"5",May:"4",June:"6",July:"7",August:"6",September:"4",October:"4",November:"3",December:"3",
以及更新 OPs 代码:
datfile=$(mktemp)
for FILE in data.csv
do
paste -d" " <(locale mon | tr ';' '\n') <(tr ',' '\n' < data.csv) | grep -v '^ $' | tr ' \n' ':,' > "${datfile}"
gnuplot -p <<-EOF
set datafile separator ","
set xlabel "xlabel"
set ylabel "ylabel"
set title "graphTitle"
plot "${datfile}" using $xcolumn:$ycolumn
EOF
done
'rm' -rf "${datfile}" > /dev/null 2>&1
看起来gnuplot 可以接受各种格式的数据,包括:
January "3"
February "5"
March "6"
April "5"
May "4"
June "6"
July "7"
August "6"
September "4"
October "4"
November "3"
December "3"
注意:如果 OP 确定这不是可接受的文件格式,那么我相信我们可以想出别的东西……只需要用有效文件的样本更新问题显示月份和数字的格式。
因此,如果我们可以即时生成此数据集,我们就可以将其提供给gnuplot ...
首先我们让locale 为我们生成月份:
$ locale mon
January;February;March;April;May;June;July;August;September;October;November;December
接下来我们可以将单行/多列数据集转置为多行/单列数据集:
$ locale mon | tr ';' '\n'
January
February
March
April
May
June
July
August
September
October
November
December
$ tr ',' '\n' < data.csv
"3"
"5"
"6"
"5"
"4"
"6"
"7"
"6"
"4"
"4"
"3"
"3"
从这里我们可以将paste这两个数据集放在一起,使用空格作为列分隔符:
$ paste -d" " <(locale mon | tr ';' '\n') <(tr ',' '\n' < data.csv)
January "3"
February "5"
March "6"
April "5"
May "4"
June "6"
July "7"
August "6"
September "4"
October "4"
November "3"
December "3"
最后一步是将其写入 (tmp) 文件,例如:
$ datfile=$(mktemp)
$ paste -d" " <(locale mon | tr ';' '\n') <(tr ',' '\n' < data.csv) | grep -v '^ $' > "${datfile}"
$ cat "${datfile}"
January "3"
February "5"
March "6"
April "5"
May "4"
June "6"
July "7"
August "6"
September "4"
October "4"
November "3"
December "3"
注意:grep -v '^ $' 是为了去掉与data.csv 中最后一个逗号(,)相关的末尾多余的行
从这里"${datfile}" 可以根据需要提供给gnuplot,一旦不再需要就删除,例如:
$ gnuplot ... "${datfile}" ...
$ 'rm' -rf "${datfile}" > /dev/null 2>&1