web-dev-qa-db-ja.com

シェルで.txtを.csvに変換します

テキストファイルがあります。

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
12
Kay

ここでawkはちょっとやり過ぎかもしれません。私見、trをこのような単純な置換に使用すると、はるかに簡単になります。

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

Sedのみで他には何もありません

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

猫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
18
syadav

これは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
4
bertramlau

これを試して ..

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

[〜#〜] output [〜#〜]

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
2
Amey Jadiye

必ずしも最良ではない可能性の1つは、次のとおりです。

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

1行目の前に見出しを挿入します。 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

レビューで、これはおそらく私が使用するものです。

2

awk commandを使用して単純に実行します。

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