用于输出为两列 csv 的终端命令

用于输出为两列 csv 的终端命令

我在终端中有一个 awk 脚本,它执行一些计数功能:

awk '{ a[$2]++ }END{ for(i in a) printf "%-15s%s\n",i,a[i] }'   
Data_1

我计划输出为 csv 文件,其中添加

awk '{ a[$2]++ }END{ for(i in a) printf "%-15s%s\n",i,a[i] }'    
Data_1 > Count.csv

但我现在面临的问题是,上面的 awk 脚本输出

Gregor   4
Alexis   15
George   17

输出为csv文件后,名称和计数仅附加到excel中的一列A中。我如何在终端中格式化 csv 命令以指定一列中的名称和另一列中的数字?在Excel中我想获得

A         B
Gregor    4
Alexis    15
George    17

答案1

.csv当您使用 with 时,您需要在字段之间添加逗号以具有简单的类型格式printf

awk '{ a[$2]++ }END{ for(i in a) printf "%-15s,%s\n",i,a[i] }'
Gregor    ,4
Alexis    ,15
George    ,17

或成熟的 .csv 类型

awk '{ a[$2]++ }END{ for(i in a) printf "\"%-15s\",\"%s\"\n",i,a[i] }'
"Gregor    ","4"
"Alexis    ","15"
"George    ","17"

但您可以使用(simple .csv)来print代替并添加awk逗号。OFS

awk '{ a[$2]++ }END{ for(i in a) print i,a[i] }' OFS=,
Gregor,4
Alexis,15
George,17

或者只是在字段本身中打印它。

awk '{ a[$2]++ }END{ for(i in a) print i","a[i] }'
Gregor,4
Alexis,15
George,17

对于成熟的 .csv 格式。

awk '{ a[$2]++ }END{ for(i in a) print "\""i"\",\""a[i]"\"" }'
"Gregor","4"
"Alexis","15"
"George","17"

相关内容