使用 AWK 命令以 CSV 格式输出

使用 AWK 命令以 CSV 格式输出

我有一个输入.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

相关内容