我有一个每天都会自动生成的csv文件,其输出类似于以下示例:
"N","3.5",3,"Bob","10/29/17"
"Y","4.5",5,"Bob","10/11/18"
"Y","5",6,"Bob","10/28/18"
"Y","3",1,"Jim",
"N","4",2,"Jim","09/29/17"
"N","2.5",4,"Joe","01/26/18"
我需要对文本进行转换,以便按人员将其分组(第四列),并且所有记录都在一行中,并且在列中使用相同的顺序重复:1、2、3、5。某些单元格可能缺少数据,但必须保留在序列中,以便列对齐。因此,我需要的输出将如下所示:
"Bob","N","3.5",3,"10/29/17","Y","4.5",5,"10/11/18","Y","5",6,"10/28/18"
"Jim","Y","3",1,,"N","4",2,"09/29/17"
"Joe","N","2.5",4,"01/26/18"
我愿意使用sed,awk或几乎所有标准Linux命令来完成此任务。我一直在尝试使用awk,尽管我接近了,但是我不知道如何完成它。
这是我关闭的命令。它列出了标题和名称,但没有其他数据:
awk -F"," 'NR==1; NR>1 {a[$4]=a[$4] ? i : ""} END {for (i in a) {print i}}' test2.csv
最佳答案
您只需要更多代码
$ awk 'BEGIN {FS=OFS=","}
{k=$4; $4=$5; NF--; a[k]=(k in a?a[k] FS $0:$0)}
END {for(k in a) print k,a[k]}' file
"Bob","N","3.5",3,"10/29/17" ,"Y","4.5",5,"10/11/18" ,"Y","5",6,"10/28/18"
"Jim","Y","3",1, ,"N","4",2,"09/29/17"
"Joe","N","2.5",4,"01/26/18"
请注意,
NF--
技巧可能不适用于所有awk
。