合并带有变量名称的编号文件

Merge numbered files with variable names

我有很多编号的文件,例如: alpha_01.txt alpha_02.txt beta_01.txt beta_02.txt 我想执行一行 bash,它将根据 变量 名称(例如 alpha、beta、...)输出正确合并的文件,即 alpha.txt beta.txt.

我可以对单个文件执行此操作:

cat alpha_*.txt(n) >>alpha.txt 2>/dev/null

但是我不知道_*.txt之前的名字。 我可以在这里使用通配符吗?或者最好的解决方案是什么?

如果您想连接所有 alpha_xxx.txt 个文件,那么您不能在 cat.

的参数中包含 beta_xxx.txt

正如@tripleee 所说,最简单的方法是使用 for 循环,在其中列出所有前缀:

for name in alpha beta
do
    cat "$name"_*.txt > "$name".txt
done

现在,如果您事先不知道前缀,那么您可以随时使用 awk:

进行锻炼
awk '
    BEGIN {
        for (i = 1; i <= ARGC; i++) {
            filename = ARGV[i]

            if (filename !~ /^(.*\/)?[^\/]+_[0-9]+\.[^\/.]+$/)
                continue

            match(filename, /^(.*\/)?[^\/]+_/)
            prefix = substr(filename, RSTART, RLENGTH-1)

            match(filename, /\.[^.\/]+$/)
            suffix = substr(filename, RSTART, RLENGTH)

            outfile[filename] = prefix suffix
        }
    }
    FILENAME in outfile { print [=11=] > outfile[FILENAME] }
' ./*.txt