将文件名作为列添加到csv文件中

时间:2016-04-28 21:40:54

标签: linux command-line

我有一长串用于数据挖掘的csv文件(新文件每天都会出现)。每个文件名都包含创建文件的日期。我需要解析文件名中的日期并将其作为新列添加到文件中的每一行(更改标题行也会很好)。

所以,如果我有一个名为cx3-2016-04-01.csv的文件,其中包含以下内容:

country,os,os_ver,oem,model
CN,A,6.0,Xiaomi,MI NOTE    
US,A,6.0,LGE,LGLS7700
CN,A,6.0,Xiaomi,MI 4LTE
US,A,6.0,LGE,LGUS991
US,A,6.0,LGE,LGUS991

我希望输出看起来像:

date,country,os,os_ver,oem,model
2016-04-01,CN,A,6.0,Xiaomi,MI NOTE    
2016-04-01,US,A,6.0,LGE,LGLS7700
2016-04-01,CN,A,6.0,Xiaomi,MI 4LTE
2016-04-01,US,A,6.0,LGE,LGUS991
2016-04-01,US,A,6.0,LGE,LGUS991

可以以及如何在单个命令或命令链中使用标准linux命令行工具(但不能使用脚本)来执行此操作?

1 个答案:

答案 0 :(得分:1)

试试这个awk

在存储文件的路径上运行此命令或使用路径提供文件名。在下面我刚刚给出了文件名(cx3-2016-04-01.csv)。

awk ' { x=1 ; if ( x == NR ) { print "date,country,os,os_ver,oem,model" } else { gsub("cx3-","",FILENAME); gsub(".csv","",FILENAME); print FILENAME","$0 } } ' cx3-2016-04-01.csv

工作原理

  1. 第一行是标题的硬编码(日期,国家,操作系统,os_ver,oem,模型)

  2. 对于其他每一行,文件名" cx3 - "和" .csv"被移除并使用,(逗号)添加到行的开头。

  3. 以上是上述命令产生的输出。 date,country,os,os_ver,oem,model 2016-04-01,CN,A,6.0,Xiaomi,MI NOTE 2016-04-01,US,A,6.0,LGE,LGLS7700 2016-04-01,CN,A,6.0,Xiaomi,MI 4LTE 2016-04-01,US,A,6.0,LGE,LGUS991 2016-04-01,US,A,6.0,LGE,LGUS991