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