AWK 在循环中合并两个不同的顺序文件集

AWK merge two different sequential file set in a loop

我有两组文件,例如P_1.dat、P_2.dat、P_3.dat、...P_45.dat和S_1.dat、S_2.dat, S_3.dat,.....,S_45.dat。我想要做的是在一个循环中顺序合并每一对(P 和 S),并为结果文件分配一个新名称。

awk '{for (i=1;i<=45;++i) paste P_i.dat S_i.dat}' > NEWNAME_i.dat

如果我没理解错的话,你只需要一个shell循环:

for i in {1..45}; do
    paste "P_$i.dat" "S_$i.dat" > "L_$i.dat"
done

生成的一系列文件将分别包含两个对应的 P 和 S 文件的内容。

如果您的 shell 不理解大括号扩展,那么您可以使用 while 循环实现相同的目的:

i=1
while [ $i -le 45 ]; do
    paste "P_$i.dat" "S_$i.dat" > "L_$i.dat"
    i=$(( i + 1 ))
done

显然在这种情况下,45 可以用一个变量代替。

或者,如果您的 shell 支持它,您可以使用 C 风格的 for 循环:

max=20
for (( i = 1; i < max; ++i )); do
    paste "P_$i.dat" "S_$i.dat" > "L_$i.dat"
done

...或者您可以循环遍历文件本身:

for file in P_*.dat; do
    i=${file%.dat}
    i=${number#P_}
    paste "P_$i.dat" "S_$i.dat" > "L_$i.dat"
done