在shell中将.txt转换为.csv

Kay*_*Kay 12 linux csv shell awk

我有一个文本文件:

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
Run Code Online (Sandbox Code Playgroud)

我想将其转换为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
Run Code Online (Sandbox Code Playgroud)

我正在尝试这个,但没有得到结果.

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

sya*_*dav 18

只有sed,没有别的

sed 's/ \+/,/g' ifile.txt > ofile.csv
Run Code Online (Sandbox Code Playgroud)

猫ofile.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
Run Code Online (Sandbox Code Playgroud)


Mur*_*nik 17

awk这里可能有点矫枉过正.恕我直言,使用tr像这样的直接替换更简单:

$ cat ifile.txt | tr -s '[:blank:]' ',' > ofile.txt
Run Code Online (Sandbox Code Playgroud)

  • tr -s'[:blank:]'','<csv> ofile.txt,cat命令可以被阻止. (6认同)
  • 在大多数情况下,我更喜欢从“猫”开始 - 当您从左到右有一个执行流时,它更容易阅读(恕我直言)。如果这是一次性转换,则必须执行“cat”的性能开销可以忽略不计。如果这是每秒执行数十次的系统的一部分,那么您可能是对的。 (2认同)

ber*_*lau 6

这是 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
Run Code Online (Sandbox Code Playgroud)