合并带有变量名称的编号文件
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
我有很多编号的文件,例如:
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