假设我有一个包含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
由于上面显示了清楚的模式,我想知道是否有办法将其变成单个命令?
尝试一下:
for i in X Y Z; do paste $i{1,2,3}.txt | awk -f awkfile.awk; done
以下脚本可以完成这项工作(我添加了注释以使每一步都很清楚)。优点是,这不直接取决于文件的命名,也不取决于三胞胎的数量。它仅假定目录仅包含感兴趣的文件并且已对它们进行了排序(问题中的情况都是如此)。
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
编辑:代码在斜杠“ /”后显示为灰色,但我不知道如何更改它?