使用cut将Pipe-Delimited转换为逗号分隔

时间:2015-11-29 22:03:37

标签: bash delimiter cut

我有一个以管道分隔的输入csv,我想从中选择几列然后另存为逗号分隔文件。

使用下面的代码我可以读取输入csv并将所选列保存为新的csv,但它仍然是以管道分隔的:

cut -d "|" -f1-2,15,28-31,35 < input_file.csv > output_file.csv

当我尝试使用output-delimiter选项时,我收到了非法选项错误。

我试过了:

cut -d "|" -f1-2,15,28-31,35 --output-delimiter="," < input_file.csv > output_file.cv

cut -d "|" -f1-2,15,28-31,35 < input_file.csv > output_file.csv --output-delimiter=","

但是我收到了错误

cut: illegal option -- -
usage: cut -b list [-n] [file ...]
       cut -c list [file ...]
       cut -f list [-s] [-d delim] [file ...]

1 个答案:

答案 0 :(得分:2)

我的cut并不了解--output-delimiter指令。您确定自己的版本为cut吗?

一个想法是先将|翻译成,,然后将其删除:

tr '|' ',' < input_file.csv | cut -d ',' -f1-2,15,28-31,35 > output_file.csv

另一个选项是awk,它可以理解输入和输出的不同字段分隔符:

awk 'BEGIN {FS="|"; OFS=","} 
           {print $1, $2, $15, $28, $29, $30, $31, $35}' \
     < input_file.csv >output_file.csv

干杯