我的文件名是这样的:
/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
的东西也可以......
您可以使用 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