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

时间:2016-03-02 09:21:47

标签: awk sed gawk

我有两组文件,例如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

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你只需要一个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