如何获取以下所示数据的文件扩展名。显然,csv文件中有数百万行。
col1 ,col2 ,col3 ,col4 , col5, col6, col7
aaaaa/ ,0 ,2018-03-16T09:31:42.000Z, xx-daily.......
aaaaa/201802/ ,0 ,2019-01-17T06:16:34.000Z, xx-daily
aaaaa/201802/Feb2018000000_0.gzip,32602738,2018-09-11T04:05:38.000Z, xx-daily
aaaaa/201802/Feb2018000001_0.gzip,32602738,2018-09-11T04:05:38.000Z, xx-daily
aaaaa/201802/Feb2018000002_0.gzip,32602738,2018-09-11T04:05:38.000Z, xx-daily
aaaaa/201802/Feb2018000003_0.gzip,32602187,2018-09-11T04:05:38.000Z, xx-daily
aaaaa/201802/Feb2018000004_0.gzip,32602187,2018-09-11T04:05:39.000Z, xx-daily
aaaaa/201802/Feb2018000005_0.gzip,32602187,2018-09-11T04:05:39.000Z, xx-daily
aaaaa/201802/Feb2018000006_0.gzip,32578449,2018-09-11T04:05:39.000Z, xx-daily
我需要分割文件扩展名并创建另一列以在同一csv文件中填充文件扩展名值。
需要以下输出
col1 ,col2 ,col3 ,col4 , col5, col6, col7
aaaaa/ ,0 ,2018-03-16T09:31:42.000Z, xx-daily.......
aaaaa/201802/ ,0 ,2019-01-17T06:16:34.000Z, xx-daily
aaaaa/201802/Feb2018000000_0.gzip, gzip ,32602738,2018-09-11T04:05:38.000Z, xx-daily
aaaaa/201802/Feb2018000001_0.gzip, gzip ,32602738,2018-09-11T04:05:38.000Z, xx-daily
aaaaa/201802/Feb2018000002_0.gzip, gzip ,32602738,2018-09-11T04:05:38.000Z, xx-daily
答案 0 :(得分:0)
这有点笨拙,不添加您似乎想要的空格,并在那些没有文件扩展名的行中引入了空白列(我相信这是正确的行为,并且很容易修改它如果愿意,停止这样做)。但是,在任何情况下我都不会纵容写回正在读取的文件中。 awk的某些实现提供了这样做的功能,但是使用它是错误的。使用过滤器,然后将输出写入另一个文件。如果需要,可以覆盖原始文件。
awk '{c=split($1,a,"."); ext=c>1?a[c]:""; $2=ext OFS $2}1' FS=, OFS=, input-file
您可以通过以下方式获得更好的间距:
awk '{c=split($1,a,"."); ext=c>1?a[c]:""; $2=ext OFS $2}1' FS=, OFS=',\t' input
,您可以通过以下方式避免使用空列(但您确实不想这样做):
awk '{c=split($1,a,"."); if( c > 1) $2=a[c] OFS $2}1' FS=, OFS=',\t' input