假设我们有一系列文件,列出为:
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 列表中获取不同的前缀?
这是获取前缀的纯 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从变量 中删除$file。sort -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_。