使用bash中的标头将.txt文件转换为.csv

时间:2013-06-07 15:14:51

标签: bash shell csv

.txt看起来像:

2013-04-10;248179;5431;5375.30€;1.49
..
..
..

我需要带有标题的.csv文件:

Date       Visit   Login  Euro      Rate
2013-04-10 248179  5431   5375.30€  1.49
..         ..      ..     ..        ..
..         ..      ..     ..        ..

有没有办法用BASH获得这个结果?

3 个答案:

答案 0 :(得分:10)

这应该这样做,如果您的字段不包含任何有趣的业务:

(echo "Date;Visit;Login;Euro;Rate" ; cat file.txt) | sed 's/;/<tab>/g' > file.csv

你只需要在bash中按字面输入一个标签(^ V TAB)。如果你的sed版本支持它,你可以写\t而不是文字标签。

答案 1 :(得分:2)

您可以使用awk:

echo -e "Data\tVisit\tLogin\tEuro\tRate" > newfile; awk -F';' ' {$1=$1}1' OFS="\t" file >> newfile

{$1=$1}1是强制新字段分隔符的技巧。

带有echo

-e强制将标签字符解释为标签。

编辑:更改管道|到&amp;然后到;

答案 2 :(得分:1)

这是一个纯粹的bash解决方案。将标头存储在一个数组中,然后将IFS设置为tab,然后设置echo标头。使用read循环遍历文件,在设置的路上将IFS设置为;     IFStab并在出路时运行echo

headers=(Date       Visit   Login  Euro      Rate)
((IFS=$'\t'; echo "${headers[*]}"); 
while IFS=';' read -r -a arr; do
(IFS=$'\t'; echo "${arr[*]}";)
done < test.fil) > test.csv