Bash:列出文件的不同前缀

Che*_*Cat 6 regex bash

假设我们有一系列文件,列出为:

T001_000.txt
T001_001.txt
T001_002.txt
T005_000.txt
T005_001.txt
T012_000.txt
...
T100_000.txt
Run Code Online (Sandbox Code Playgroud)

我们想要合并具有相同 T 的文件???字首。例如,我们想要对每个带有 T001 前缀的文件执行以下操作:

merge T001_*.txt > newT001.txt #i just made up this function
Run Code Online (Sandbox Code Playgroud)

如何从 bash 列表中获取不同的前缀?

Dav*_* W. 6

这是获取前缀的纯 BASH 方法:

for file in *.txt
do
     echo "${file%_*.txt}"
done | sort -u
Run Code Online (Sandbox Code Playgroud)

这将为您提供所有文件前缀的列表。从那里,你可以用它来治疗你的猫。

for循环会遍历所有文件。您可以说for file in T*_*.txt限制您拾取的文件。

${file%_*.txt}一个小的右模式过滤器,可_*.txt从变量 中删除$filesort -u对所有这些前缀进行排序,并合并重复项。

最好的方法是将其用作函数:

function prefix
{
    for file in *.txt
    do
        echo "${file%_.txt}"
    done | sort -u
}

prefix | while read prefix
do
   ${prefix}_*.txt > cat $prefix.txt
done
Run Code Online (Sandbox Code Playgroud)

请注意${...}名称周围的内容。这是因为$prefix_也是一个有效的 shell 脚本变量。我需要${prefix}让 shell 知道我正在谈论$prefix而不是$prefix_