0

.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 得到这个结果?

4

3 回答 3

10

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

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

您只需在 bash (^V TAB) 中按字面意思键入一个制表符。如果您的 sed 版本支持它,您可以编写\t而不是文字选项卡。

于 2013-06-07T15:20:16.293 回答
2

您可以使用 awk :

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

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

echo-e强制制表符被解释为制表符。

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

于 2013-06-07T15:30:51.667 回答
1

这是一个纯 bash 解决方案。将标头存储在一个数组中,然后设置IFS为标头。循环读取文件,在输入时设置为,在输出时设置 为并运行。tabechoIFS;IFStabecho

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
于 2013-06-07T15:33:45.210 回答