2013-10-21 145 views
1

我有以下幾點:。需要幫助建立的Linux腳本

... 
#define DIRT 4 
#define PLANKS 5 
#define WOOD_PLANKSs 5 
#define BRICKS 6 
... 

我需要刪除具有相同數量作爲他們前行的線路之一(防爆取出木板,因爲woodplanks具有相同的號碼, 5)。

是否有一種方法可以在linux(或Windows)腳本中執行此操作,也許使用if then語句?

+0

您的文件是否僅由「define」條目組成,還是文件中的其他行?重複的項目是否總是連續的? – jwatkins

+0

重複的值始終是連續的,它只能由#define NAME# –

+0

組成,然後轉到carlpett的解決方案;)。 – jwatkins

回答

5

在Linux上,使用uniq命令和參數-f跳過比較前兩個字段:uniq -f 2 <your-file>

+0

所以,如果我想刪除file.txt中的WOOD_PLANKS行,那麼我會用什麼? –

+0

上面的命令將通過發佈'uniq -f 2 file.txt'去除'WOOD_PLANKS'(以及任何其他具有重複的第三列的行) – carlpett

2

創建一個名爲removeDup.awk一個awk腳本作爲

1 BEGIN  { lastDefine="" 
    2   } 
    3 /^#define/ { if (lastDefine=="") { 
    4    lastDefine=$3 
    5    } else { 
    6    if (lastDefine==$3) { 
    7     next 
    8    } else { 
    9     lastDefine=$3 
10    } 
11    } 
12   } 
13   { print 
14   } 

的awk -f removeDup。 awk文件名

+0

好吧,那看起來像我要發佈的解決方案,那會如果該文件可能包含其他非定義行,則需要該文件。 +1的努力;) – jwatkins

+0

當我訪問Linux計算機或可以找到一個在線shell時,我會試試這個。 –