AWK,在$ Line1之后通过传递行号移动$ Line2

时间:2014-10-04 17:16:08

标签: regex awk

美好的一天,

我想知道如何移动一条线。两个都是同一个文件。

  1. 传递两个数字行-v var1="$Line1" -v var2="$Line2"
  2. $Line2之后移动$Line1,始终$Line1 < $Line2
  3. 预期输入

    Line1=2 
    Line2=5
    
    NR  $0
    1   a
    2   b
    3   c
    4   d
    5   e
    6   f
    

    预期输出

    NR  $0
    1   a
    2   b
    5   e
    3   c
    4   d
    6   f
    

    提前感谢任何线索

1 个答案:

答案 0 :(得分:2)

假设Line1位于Line2之前,这应该可以工作:

Line1=2
Line2=5
awk -v var1="$Line1" -v var2="$Line2" \
'{ if ((NR <= var1) || (NR > var2)) { print $0; }
   else if (NR == var2) { print $0 buffer; }
   else { buffer=(buffer "\n" $0); }
 }' inputfile

正常打印插入点之前或提取点之后的所有行。达到提取点时,将打印该行以及缓冲区中累积的所有内容。在插入点和提取点之间,行被添加到缓冲区而不是立即打印出来。