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

问题描述 投票:0回答:2

假设我有一个包含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

由于上面显示了清楚的模式,我想知道是否有办法将其变成单个命令?

awk pipeline paste
2个回答
0
投票

尝试一下:

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

0
投票

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

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

编辑:代码在斜杠“ /”后显示为灰色,但我不知道如何更改它?

© www.soinside.com 2019 - 2024. All rights reserved.