【问题标题】:Using cut to Convert Pipe-Delimited to Comma-Delimited使用 cut 将管道分隔符转换为逗号分隔符
【发布时间】:2015-11-29 22:03:37
【问题描述】:

我有一个以竖线分隔的输入 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 ...]

【问题讨论】:

  • 你为什么不翻译? tr '|' ,.
  • @4ae1e1 因为我不知道那是什么。
  • 那就去阅读man tr
  • 试着把--output-delimiter=","放在-d "|"之后
  • @Marichyasana 同样的错误

标签: bash delimiter cut


【解决方案1】:

我的 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

干杯

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多