UNIX如何多次分析目录中的文件列表

时间:2019-05-15 22:01:20

标签: linux shell unix

我正在处理目录中的文件列表。我已经使用awk来剪裁特定字段。接下来,我想进一步缩小文件。

我的命令是 ls /archive/gtx_rec_full | grep '2019-05-1' | awk '{print $5,$6,$7,$8}' | more

返回类似

的列表
  

9636502 2019-05-10 00:40 /archive/gtx_rec_full/GTX_20190608_1967_40431_236965.dat.gz   15915297 2019-05-10 01:39 /archive/gtx_rec_full/GTX_20190608_1967_40432_382768.dat.gz   10672671 2019-05-10 01:39 /archive/gtx_rec_full/GTX_20190608_1967_40433_261926.dat.gz   17362746 2019-05-10 02:41 /archive/gtx_rec_full/GTX_20190608_1967_40434_418702.dat.gz   1335538​​1 2019-05-10 03:40 /archive/gtx_rec_full/GTX_20190608_1967_40435_323201.dat.gz

我想保留文件大小和时间戳,然后截取唯一的文件ID,例如40431、40432、40433等。因此,我的新结果集如下所示:

9636502  05/10/2019 00:40   /archive/gtx_rec_full/40431
15915297 05/10/2019 01:39   /archive/gtx_rec_full/40432
10672671 05/10/2019 01:39   /archive/gtx_rec_full/40433
17362746 05/10/2019 02:41   /archive/gtx_rec_full/40434
13355381 05/10/2019 03:40   /archive/gtx_rec_full/40435

我不清楚如何执行此操作。谁能提供一些建议? 谢谢!

我正在使用7.5的Red Hat Enterprise Linux Server

2 个答案:

答案 0 :(得分:1)

据您的评论我了解到,您想要

| sed -r 's/GTX.*_(.*)_[^_]*/\1/;s/\// /g'

(或者,当您对斜线感到困惑时)

| sed -r 's#GTX.*_(.*)_[^_]*#\1#;s#/# #g'

如果发现的解决方案不同,请张贴该解决方案并接受您自己的答案。
然后每个人都看到问题已经“解决”。

答案 1 :(得分:0)

尝试一下:

#!/bin/bash
while IFS= read -r -d '' line; do
   id=$(awk -F_ '{ print $4 }' <<< "${line##*/}")
   path=$(awk '{ print $4 }' <<< "${line%/*}")
   newpath="$path/$id"
   echo "${newpath//\/*/}"
done < <(find /archive/gtx_rec_full -type f -name 'GTX_*' -printf "%-10s %Am/%Ad/%AY %AH:%AM   %p\n" -print0)