2013-07-05 55 views
0

我有一個包含200,000多行的文件。第一個字段是密鑰ID。我需要刪除重複第一個字段的2,3,4行。請幫助!我在限期之內。我已經嘗試了很多類似回答的問題,但都沒有成功。使用awk刪除第一個字段的重複內容

+2

首先:爲什麼你的最後期限要求您使用'awk',特別是?有沒有一些要求,你沒有提及?其次:爲了確保清楚你想要什麼,請張貼一些樣本輸入和輸出。 – ruakh

+0

請舉例說明!你的文件是否已分類?你只是想刪除重複(col 1基礎)線? – Kent

+3

問題必須**表明對正在解決的問題的最小理解**。告訴我們你試圖去做什麼,爲什麼它沒有工作,以及它應該如何工作。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。 – Endoro

回答

0

這是做你想做的嗎?

print -- " 
1 
1 
1 
2 
2 
2 
3 
3 
3 
4" | awk '{ if (! ($1 in alreadyPrinted)) {print $1 ; alreadyPrinted[$1]=$1;}' 

輸出

1 
2 
3 
4 

如果沒有,請大家及時補充小樣本輸入,並顯示基於該輸入所需的輸出。如果你做了一些代碼,包括它,幷包含你得到的錯誤消息的確切文本。

IHTH

+0

由於這個問題特別提到了第一個字段,所以在整個過程中使用'$ 1'而不是'$ 0'可能是有意義的。如果文件被排序,你只需要一個變量,而不是一個數組。 – tripleee

+0

約1美元的好主意。不清楚數據是否被排序。我最低限度的解決方案是爲了幫助O.P.想象我們需要真正理解問題。謝謝,祝你好運。 – shellter

2

代碼GNU

sed -nr '1{h;s/\s*(\S+).*/\1/;x;p}; 1!{x;G;/(\S+)\n\1.*/!{s/\n.*//;x;p;b};s/\n.*//;x;d}' file.txt 
 
$cat file.txt 
line1 11111 
line2 22121 
line1 11212 
line2 22222 
line1 11313 
line2 22323 
line1 11414 
line2 22424 
line1 11515 
line2 22525 

$sed -nr '1{h;s/\s*(\S+).*/\1/;x;p}; 1!{x;G;/(\S+)\n\1.*/!{s/\n.*//;x;p;b};s/\n.*//;x;d}' file.txt 
line1 11111 
line2 22121 
line2 22222 
line2 22323 
line2 22424 
line2 22525 
相關問題