2014-01-08 129 views
0

我想刪除文件中的大多數重複行(或從腳本函數的管道輸出,更準確),但要保留其他包含特定模式的行。 在這裏和其他地方看到刪除某些重複的行,同時保留其他

awk '!($1 in a){a[$1];print}' OR 
awk '!x[$0]++' 

工作巨大的,如果你正在尋找簡單地刪除每個副本。 但是,可以很容易地添加到這種機制的條件?

例如,我想保持所有行:

$1==".:"||$1==":."||$1==":"||$1="." 

但是,任何其他行,我會想,以確保不重複。 所以在下面的例子中,我想刪除「/ bin」和「/ usr/bin」。

/bin 
: 
/usr/bin 
: 
/usr/openwin/bin 
: 
/usr/bin 
: 
/usr/etc 
: 
/etc 
:. 
: 
a 
: 
/usr/bin/X11 
: 
. 
: 
/bin 
: 

感謝

回答

0

這應該爲你工作:

awk '!($1 in a) || ($1 == ":") || ($1 == ":.") || ($1 == ".:") || ($1 == ".") {a[$1];print}' 
0

工作的呢?

awk '($1==".:"||$1==":."||$1==":"||$1="."||!x[$0]++)' $file 
+0

這並不提供答案的問題。要批評或要求作者澄清,請在其帖子下方留言。 – ScottJShea

+0

這不是一個答案嗎?建議使用awk命令行來解決問題。假設它可以正常工作(它在我的結尾做了一個快速測試),它甚至是正確的。這個問題的答案比發佈到這個問題的其他兩個答案要少得多嗎? –

0
$ awk '!seen[$0]++ || ($1 ~ /^(\.:|:\.|:|\./)$)' file  
/bin 
: 
/usr/bin 
: 
/usr/openwin/bin 
: 
: 
/usr/etc 
: 
/etc 
:. 
: 
a 
: 
/usr/bin/X11 
: 
. 
: 
: 
相關問題