用于设置CSV列宽以适合的Shell脚本?

时间:2014-01-04 20:56:52

标签: macos shell csv

是否可以从shell脚本格式化csv,以便将所有列设置为适合?

这就是我所拥有的,只是不确定还有什么可以改变:

#! /bin/bash

saveDir="TJ"
dd=$(date -v -1d '+%Y-%m-%d')
for file in *.csv ; do
    saveName="${saveDir}/TJ - ${dd}.csv"
    cut -d',' -f2,14 "$file" > "$saveName"
done

此外,在切割色谱柱并仅留下第2和第14列后,我还有3个额外的空白列...如何摆脱这些?

示例文件:http://d.pr/3a5Z

这就是我想要CSV的方式,显示两列中的所有文字并删除额外的列:http://d.pr/S1mz

编辑:

#! /bin/bash

saveDir="TJ"
dd=$(date -v -1d '+%Y-%m-%d')
for file in *.csv ; do
    saveName="${saveDir}/TJ - ${dd}.csv"
    awk '{x="";for(i=2;i<=14;i++){if(length(x))x=x",";x=x$i;}print x;}' yourfile
done

2 个答案:

答案 0 :(得分:1)

一种解决方案是使用sed删除三个尾随逗号

输入:

$ cat TJ\ -\ 2014-01-03.csv
name,number,,,
test,1.00000,,,
...

输出:

$ sed 's/,,,//' TJ\ -\ 2014-01-03.csv
name,number
test,1.00000
test,2.00000
test,3.00000
...

答案 1 :(得分:1)

严重编辑

试试这个:

#!/bin/bash
saveDir="TJ"
dd=$(date -v -1d '+%Y-%m-%d')
for file in *.csv ; do
   saveName="${saveDir}/TJ - ${dd}.csv"
   awk '{x="";for(i=2;i<=14;i++){if(length(x))x=x",";x=x$i;}print x;}' $file > "$saveName"
done