在shell中将.txt转换为.csv

guz6ccqo  于 2022-11-30  发布在  Shell
关注(0)|答案(7)|浏览(239)

我有一个文本文件:

ifile.txt
1  4    22.0  3.3 2.3
2  2    34.1  5.4 2.3
3  2    33.0 34.0 2.3
4 12     3.0 43.0 4.4

我想将其转换为csv文件:

ofile.txt
ID,No,A,B,C
1,4,22.0,3.3,2.3
2,2,34.1,5.4,2.3
3,2,33.0,34.0,2.3
4,12,3.0,43.0,4.4

我试过这个,但没有得到结果。

(echo "ID,No,A,B,C" ; cat ifile.txt) | sed 's/<space>/<comma>/g' > ofile.csv
ix0qys7i

ix0qys7i1#

只有sed,没有其他

sed 's/ \+/,/g' ifile.txt > ofile.csv

目录文件.csv

1,4,22.0,3.3,2.3
2,2,34.1,5.4,2.3
3,2,33.0,34.0,2.3
4,12,3.0,43.0,4.4
bpzcxfmw

bpzcxfmw2#

awk在这里可能有点过头了。恕我直言,使用tr进行直接替换要简单得多:

$ cat ifile.txt | tr -s '[:blank:]' ',' > ofile.txt
xe55xuns

xe55xuns3#

这是awk版本
awk 'BEGIN{print "ID,No,A,B,C"}{print $1","$2","$3","$4","$5}' ifile.txt
输出:

ID,No,A,B,C 
1,4,22.0,3.3,2.3 
2,2,34.1,5.4,2.3 
3,2,33.0,34.0,2.3
4,12,3.0,43.0,4.4
eoigrqb6

eoigrqb64#

试试这个

tr -s " " < ifile.txt | sed 's/ /,/g' > ofile.txt

输出

1,4,22.0,3.3,2.3
2,2,34.1,5.4,2.3
3,2,33.0,34.0,2.3
4,12,3.0,43.0,4.4
ruyhziif

ruyhziif5#

一种可能性,不一定是最好的,是:

sed -e '1i\
 ID,No,A,B,C' -e 's/[[:space:]]\{1,\}/,/g' ifile.txt

在第1行之前插入标题;将一个或多个类似空格字符的序列更改为逗号。在传统(POSIX标准-在本例中为BSD或Mac OS X)sed中,换行符是必需的; GNU sed允许您使用:

/opt/gnu/bin/sed -e '1i\' -e 'ID,No,A,B,C' -e 's/[[:space:]]\{1,\}/,/g'

输出量:

ID,No,A,B,C
1,4,22.0,3.3,2.3
2,2,34.1,5.4,2.3
3,2,33.0,34.0,2.3
4,12,3.0,43.0,4.4

或者,更简单地说,让sed处理文件,并使用echo添加头文件,就像您在大纲中所做的那样:

{
echo "ID,No,A,B,C"
sed -e 's/[[:space:]]\{1,\}/,/g' ifile.txt
} > ofile.txt

回顾一下,这可能是我会用的。

cdmah0mi

cdmah0mi6#

只需使用awk命令即可。

awk '{
     printf("%d, %d, %.1lf, %.1lf,%.1lf\n", $1,$2,$3,$4,$5); 
 }'  input.txt > output.csv
h7wcgrx3

h7wcgrx37#

使用cat文件名|列-t -s“”,
我们可以在unix服务器上将平面文件转换为csv格式。

相关问题