我有以下文件数据,我想解析和过滤这些数据以从第四个字段获取卷名称,从而我想提取以 ^fsvol- 开头的最后一个字符串。
数据文件:
(devcli) $ cat test-fil1001
C0BF4EE2-1381-0D18-13A4-FBA57F84A028
Completed soc_be_fe_dm_a0_dihdmi_1 Success volume/fs-04b1dcf0d5b80b5a7/fsvol-07c8364e1ae52d087 FSx May 13, 2024, 19:15:08 (UTC+05:30) May 14, 2024, 03:15:08 (UTC+05:30)
C55114AF-E488-5FEB-F170-5B2082D21E5E
Completed soc_be_fe_dm_a0_top_irdrop_1 Success volume/fs-04b1dcf0d5b80b5a7/fsvol-02700f37153d67f85 FSx May 13, 2024, 19:14:56 (UTC+05:30) May 14, 2024, 03:14:56 (UTC+05:30)
D7AE9EF8-C573-9009-F801-4D3C0C7EC7A1
Completed soc_be_fe_dm_a0_top_irdrop_2 Success volume/fs-04b1dcf0d5b80b5a7/fsvol-083d95b98e1df03dc FSx May 13, 2024, 19:14:44 (UTC+05:30) May 14, 2024, 03:14:44 (UTC+05:30)
0C662A8C-CD25-8AF4-F2E2-BEF622A49849
Completed soc_be_fe_dm_a0_top_iosta_1 Success volume/fs-04b1dcf0d5b80b5a7/fsvol-0ad43cb17044803ac FSx May 13, 2024, 19:14:33 (UTC+05:30) May 14, 2024, 03:14:33 (UTC+05:30)
5FCF3C2A-6D2B-D16F-C8DC-3BC6564D91E4
测试试用和结果:
(devcli) $ sed -n '/^Completed/s/.*\(fsvol-[a-zA-Z0-9]*\).*/\1/p' test-fil1001
fsvol-07
fsvol-02
fsvol-08
fsvol-0a
(devcli) $ awk '/^Completed/{match($4, /fsvol-[a-zA-Z0-9]+/); print substr($4, RSTART, RLENGTH)}' test-fil1001
fsvol-07
fsvol-02
fsvol-08
fsvol-0a
(devcli) $ awk '/^Completed/{print $4}' test-fil1001 | cut -d'/' -f3
fsvol-07
fsvol-02
fsvol-08
fsvol-0a
我已经在上面尝试过了,这是有效的,但正在寻找一种最好的方法来用更短的版本或优雅的方式来做到这一点。
您可以使用单个
awk
命令来完成此操作:
awk '/^Completed/ && split($4, a, /\//) >= 3 {print a[3]}' file
fsvol-07c8364e1ae52d087
fsvol-02700f37153d67f85
fsvol-083d95b98e1df03dc
fsvol-0ad43cb17044803ac