簡體   English   中英

在 shell 中將 .txt 轉換為 .csv

[英]Convert .txt to .csv in shell

我有一個文本文件:

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

只有 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

awk在這里可能有點矯枉過正。 恕我直言,使用tr進行這樣的直接替換要簡單得多:

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

這是 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

試試這個..

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

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

 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

經過審查,這可能是我會使用的。

只需使用awk命令即可。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM