sed之僅列印相鄰重複的行
cat file
aaabbb
bbbccc
dddeee
eeefff
只顯示重複的行:
bbbbbb
eeeeee
sed -n ':a;n;/\
(.\+
\)\n\1/
!d;p' file
[解析]
讀取下一行,如果兩行內容一樣的列印,然後跳轉命令行尾,不執行 d ,如果沒匹配到就 d 刪除第一行,跳轉去命令列首繼續執行。
awk 'i
}' file <
(echo)
以上的例子僅侷限在兩行重複的情況,那麼有多行重複的情況呢?比如:
cat file
aaabbb
bbbbbb
dddeee
eee要得到:
bbbbbb
bbbeee
eeesed -n '$!n;/\
(.*\
)\n\1$/
;x;/\(
.*\)
\n\1$/p;x;
:a;h;d' file
[解析]
整體的思路是判斷如果是相鄰兩行重複的話,就 p 列印第一行,然後把當前的 pattern space 中,當相鄰行不匹配重複時,x 交換兩個空間的內容,把 hold space 裡的內容(就是上一行的 pattern space裡的內容後拷貝到的 hold space),再匹配看是否兩行重複,如果重複的話就列印。這樣就把連續的相鄰的行列印出來,避免了因為前兩行相同,而第三行和第四行不匹配的話,就無法 列印第三行的內容了。這個思路很值得借鑑。另外該**可以優化為
sed -n '$!n;/\
(.*\
)\n\1$/
;x;/
/p;x;
:a;h;d' file
//p 就可以省略匹配的內容。
ref:
【awk去重以某列重複的行,多個重複的行中保留乙個】
sed與awk去除重複行
unixf 1 如果僅僅是刪除內容完全一樣重複行 則可以使用sort先進行排序 然後使用 uniq進行刪除重複資料即可 例如 cust.txt txt 130000006800,17,151,01,250100 130000006800,17,151,01,250101 1300001077,17,...
sed與awk去除重複行
1 如果僅僅是刪除內容完全一樣重複行 則可以使用sort先進行排序 然後使用 uniq進行刪除重複資料即可 例如 cust.txt txt 130000006800,17,151,01,250100 130000006800,17,151,01,250101 1300001077,17,151,01...
sed行定位的使用
sed n 2 p file 只列印第1行,不列印其它的行 sed n 1,4 p file 從第1行開始到第4行的記錄 sed n los p file 列印匹配los的行 sed n 4,los p file 列印從第4行到匹配los之間的所有行 sed 1,2 d file 把第一行和第二行全...