我正在处理目录中的文件列表。我已经使用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 13355381 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
答案 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)