Bash:如何一次提取3个文件的父目录

问题描述 投票:0回答:1

我的文件名是这样的:

/foo/bar/bazz/JMA01023D_E07/JMA01023D_E07_EKDL230054768-1A_22HFKNLT3_L4_1.fq.gz
/foo/bar/bazz/JMA01023D_E08/JMA01023D_E08_EKDL230054768-1A_22HFKNLT3_L4_1.fq.gz
/foo/bar/bazz/JMA01023D_E09/JMA01023D_E09_EKDL230054768-1A_22HFKNLT3_L4_1.fq.gz
/foo/bar/bazz/JMA01022D_E06/JMA01022D_E06_EKDL230054767-1A_22HF2WLT3_L7_1.fq.gz
/foo/bar/bazz/JMA01001D_A01/JMA01001D_A01_EKDL230054750-1A_222T7MLT4_L1_1.fq.gz
/foo/bar/bazz/JMA01001D_A02/JMA01001D_A02_EKDL230054750-1A_222T7MLT4_L1_1.fq.gz

其中 3 个文件(完整路径,按字母顺序排序)形成一个三元组。 我想一次获取 3 个文件的父文件夹名称。

所以期望的输出是:

JMA01001D_A01 JMA01001D_A02 JMA01022D_E06
JMA01023D_E07 JMA01023D_E08 JMA01023D_E09

类似这样的:

find "$@" -iname '*_1.fq.gz' | sort | xargs -I % -n3 sh -c echo % | sed -r 's/ *[^ ]*\/([^ ]+)\/([^ ]+)/\1 /g\'

理想情况下,我想支持空间,所以带有

find -print0
sort -z
xargs -0
的东西将是理想的。 但我似乎无法让它发挥作用。

有人可以帮我理清我的大脑吗? 它不必使用 sed,带有

dirname
/
basename
awk
的东西也可以......

bash awk sed xargs
1个回答
0
投票

您可以使用 awk 获取文件夹名称并将其通过管道传输到

xargs -n 3
以获得每行 3 个项目的输出:

... | awk -F'/' '{print $(NF-1)}' | xargs -n 3

JMA01023D_E07 JMA01023D_E08 JMA01023D_E09
JMA01022D_E06 JMA01001D_A01 JMA01001D_A02
© www.soinside.com 2019 - 2024. All rights reserved.