【发布时间】:2016-07-19 10:33:01
【问题描述】:
我的源 csv 文件是制表符分隔的,我想将其转换为管道 (|) 分隔文件。 这是一些示例记录。
Loan_Name Current_Data_Status Mortgage_Loan_Seller
Market Basket RECM-PS Transfer Underwriters
我在sed命令下面试过了。
sed -i 's/\t/|/g' Test.csv
它将制表符转换为|,但它在每一行的末尾添加了额外的|。下面是我得到的输出。
Loan_Name|Current_Data_Status|Mortgage_Loan_Seller| |
Market Basket|RECM-PS Transfer|Underwriters| |
期望的输出应该是。
Loan_Name|Current_Data_Status|Mortgage_Loan_Seller
Market Basket|RECM-PS Transfer|Underwriters
请提供任何替代方法来实现这一点。
【问题讨论】:
-
好像你最后有两个
\t (tab)。 -
试试这个:
sed 's/\t\+/|/g' file.csv -
我试过了,我得到了一个额外的 |在末尾。 Loan_Name|Current_Data_Status|Mortgage_Loan_Seller|市场篮子|RECM-PS 转让|承销商|
-
已更新。现在试试这个:
sed -e 's/\t\+$//g' -e 's/\t\+/|/g' file.csv -
CSV=Comma-Separated Values。如果您的文件是制表符分隔的,那么它显然不是逗号分隔的,因此不要将其称为 CSV,因为这会产生误导。有些人会将其称为 TSV。非常重要的问题:你的最后一个字段可以是空的吗?例如foo<tab>bar<tab><tab>可以出现在您的输入文件中吗?如果是这样,请将该示例添加到您的示例输入/输出中,因为它会破坏许多可能的答案。