私入力.txtファイル形式は次のとおりです。
Name age number address
mark 23 89756342192 chennai
david 40 70214789023 delhi
以下の例に従ってTXTファイルからCSVファイルを作成するにはどうすればよいですか?ありがとうございます。
mark,23,89756342192,chennai
david,40,70214789023,delhi
以下は私が書いたスクリプトです
printrep.sh
#!/bin/sh
Headers=["Name","Age","Phone","Address"];
count=$(wc -l < $name)
i=0;
echo "Headers[0] + ' , ' +Headers[1]+ ' , ' +Headers[2] + ' , ' +Headers[3] + ' , ' +Headers[4]";
while [ $i -lt $count ]
do
read line | awk FS=' ' OFS="," '{print $0}'
i=`expr $i + 1`
done
上記のコードは出力を表示しません。私は何が間違っているのかわかりません。助けてください。私はシェルスクリプトの初心者です。
答え1
bash:IFS変数はここで重要です。これはbash固有の配列の使用です。read -a
IFS=,
while IFS=$' \t' read -ra fields; do echo "${fields[*]}"; done < input.txt
awk:非常に簡潔:$1=$1
出力フィールド区切り文字を使用して現在の行を書き換えて1
その行を印刷します。
awk '{$1=$1}1' OFS=, input.txt
ミラー:入力ファイルが必要です。いいえ空の行があります。 「かわいい印刷」形式からcsvに変換中です。
mlr --p2c cat input.txt
また、入力のコンマを正しく処理します。
$ cat input.txt
Name age number address
mark 23 89756342192 chennai
david 40 70214789023 delhi
alice 24 42 paris,texas
$ mlr --p2c cat input.txt
Name,age,number,address
mark,23,89756342192,chennai
david,40,70214789023,delhi
alice,24,42,"paris,texas"
答え2
いくつかの方法があります:
cut --output-delimiter="," -c1-6,7-11,12-25,26- < file
tr -s " " "," <file
sed -e "s/ */,/g" <file
答え3
sed -r -i 's/\s+/,/g' file.txt
output
cat file.txt
Name,age,number,address
mark,23,89756342192,chennai
david,40,70214789023,delhi