创建包含目录中文件名称的CSV文件

时间:2016-04-05 15:27:29

标签: mysql bash csv awk sed

我被困在这个项目上,我需要在目录中创建一个文件列表的cvs文件。

现在我正在使用ls -la> test.csv哪个有效但我需要分开文件权限,日期,文件名。我还需要将文件分为三部分

继承原始格式

-rw-rw-r-- 1 heta-Sxl heta-SXL 677 Apr  5 13:36 move_20160403234624_SXL_Q97GN_238.tgz
-rw-rw-r-- 1 heta-Sxl heta-SXL 678 Apr  5 13:37 move_20160403234624_SXL_Q97GN_239.tgz

这就是我要做的事情

Permissions  file size  Date   time filename1                filename 2  filename 3
-rw-rw-r--    677       APR 5  13:37 move_20160403234624_SXL  Q97GN        239     

2 个答案:

答案 0 :(得分:1)

awk救援!

添加标题...

$ awk '{split($9,f,"_");sub(/\..*/,"",f[5]);
       print $1, $5,$6,$7,$8,f[1]"_"f[2]"_"f[3],f[4],f[5]}' test.csv

-rw-rw-r-- 677 Apr 5 13:36 move_20160403234624_SXL Q97GN 238
-rw-rw-r-- 678 Apr 5 13:37 move_20160403234624_SXL Q97GN 239

您可以直接在ls输出中输入管道,而无需中间文件

$ ls -la | awk ...

答案 1 :(得分:0)

您可以使用ls来执行作业的主要部分,然后使用awk(或sed)来拆分文件名,而不是使用find

find . -maxdepth 1 -type f -printf "%M\t%s\t%Tb %Td\t%TH:%TM\t%f\n" | awk -F'[_.]' -v OFS='_' '{print $1,$2,$3"\t"$4"\t"$5}'