2014-10-04 34 views
0

美好的一天,

我想知道如何在其他行之後移動行。兩者都是相同的文件。

  1. 通過兩條數字線-v var1="$Line1" -v var2="$Line2"
  2. 移動$Line2$Line1,其中總是$Line1 < $Line2

預期輸入

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 

感謝您事先的任何線索

+0

謝謝@shellter,請參閱更新 – 2014-10-04 17:39:36

+0

現在,它更清楚了嗎? – 2014-10-04 17:44:17

+1

@Alejandro,我的答案是否適合你? – 2014-10-05 13:36:15

回答

2

假設1號線自帶2號線之前,這應該工作:

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 

正常打印插入點之前或提取點之後的所有行。當到達提取點時,打印緩衝區中積累的該行和所有內容。在插入點和提取點之間,行被添加到緩衝區而不是立即打印出來。

+0

是的,最後我可以測試你的代碼。是的!!!你的建議工作順利:D非常感謝你幫助我,週末休息一下(: – 2014-10-05 21:57:58