我有一长串用于数据挖掘的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命令行工具(但不能使用脚本)来执行此操作?
答案 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
工作原理
第一行是标题的硬编码(日期,国家,操作系统,os_ver,oem,模型)
对于其他每一行,文件名" cx3 - "和" .csv"被移除并使用,(逗号)添加到行的开头。
以上是上述命令产生的输出。
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