我有一个输入.txt文件格式如下:
Name age number address
mark 23 89756342192 chennai
david 40 70214789023 delhi
如何按照以下示例从 TXT 文件创建 CSV 文件?谢谢。
mark,23,89756342192,chennai
david,40,70214789023,delhi
下面是我写的脚本
打印代表.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
上面的代码无法显示输出。我不知道出了什么问题。请帮助我是 shell 脚本编写的初学者
答案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