将 AWK 应用于具有模式的多个文件

Apply AWK on multiple files with pattern

假设我有一个包含 9 个文件的文件夹,标签为:X1.txt、X2.txt、X3.txt、Y1.txt、Y2.txt、Y3.txt,Z1.txt,Z2.txt,Z3.txt 对于文件 (X1、X2、X3)、(Y1、Y2、Y3)、(Z1、Z2、Z3) 的每个三元组,我需要合并它们,然后让 AWK 对其执行(相同的)操作。手动,我需要在命令行中写:

paste X1.txt X2.txt X3.txt | awk -f awkfile.awk
paste Y1.txt Y2.txt Y3.txt | awk -f awkfile.awk
paste Z1.txt Z2.txt Z3.txt | awk -f awkfile.awk

由于上面显示了一个清晰的模式,我想知道是否有办法将其合并为一条命令?

下面的脚本完成了这项工作(我添加了评论以使每一步都清楚)。 优点是这不直接取决于文件的命名,也不取决于三胞胎的数量。它仅假定该目录仅包含感兴趣的文件并且它们已排序(问题中的两者都是这种情况)。

filelist=(path_to_directory/*) # record the (ordered) list of files into an array
for ((i=0; i<"${#filelist[@]}"; i+=3)); # loops from 0 to number of
                                        # files in increments of 3
do
   paste "${filelist[@]:i:3}" | awk -f awkfile.awk # paste 3 elements of the array, 
                                                   # with offset i and feed it to awk
done

编辑:代码在斜线“/”后变灰,但我不知道如何更改?

试试这个:

for i in X Y Z; do paste $i{1,2,3}.txt | awk -f awkfile.awk; done