使用shell脚本获取每一行中存在的文件的文件扩展名

时间:2019-01-17 15:31:52

标签: shell file

如何获取以下所示数据的文件扩展名。显然,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

1 个答案:

答案 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