【问题标题】:Creating a CSV file containing names of files within a directory创建包含目录中文件名的 CSV 文件
【发布时间】:2016-07-25 15:36:08
【问题描述】:

我被这个项目卡住了,我需要在一个目录中创建一个文件列表的 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     

【问题讨论】:

  • 剪切命令可以帮到你:computerhope.com/unix/ucut.htm
  • 您想在输出文件中使用逗号作为分隔符吗?
  • 是的,逗号很好,我需要将它输入到 mysql 数据库中

标签: mysql bash csv awk sed


【解决方案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 ...

【讨论】:

  • 我如何运行这个?
  • 我要这样运行吗 ls -la | awk ?
  • 是的,上面几行相同的 awk 脚本,最后没有文件名。
  • 请注意,ls -l 会根据文件的年龄更改其日期/时间格式。您可能会得到日期和时间或日期和年份。使用--time-style 选项(如果可用)提供一致的格式(例如--time-style=long-iso)。另请注意,ls 的“-a”选项将导致为“.”输出行。和 '..'。你可能只想要ls -l
  • 为什么不用 awk 生成 INSERT INTO 语句?
【解决方案2】:

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

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}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2017-11-28
    • 2015-02-23
    相关资源
    最近更新 更多