http://butterflymacro.iteye.com/blog/guest_book
sed與awk去除
Unix F#
1 如果僅僅是删除内容完全一樣重複行
則可以使用sort先進行排序 然後使用 uniq進行删除重複資料即可
例如 CUST.TXT
Txt代碼

- 130000006800,17,151,01,250100
- 130000006800,17,151,01,250101
- 1300001077,17,151,01,256600
- 1300002764,17,151,01,256600
- 1300002764,17,151,01,256630
- 1300003690,17,151,01,256600
- 1300001077,17,151,01,256600
- 1300004771,17,151,01256600
- 1300006064,17,151,01,251900
- 130000693300,17,151,01370102690715295
- 1300013082,17,151,01,51700
第3行與第7行完全相同
第一步:sort 進行排序
第二部: uniq 去除重複(必須先進行排序,否則uniq無法去除重複 uniq 是比較前後兩行的資料,如果相鄰兩行資料不同則認為資料不同)
Shell代碼

- sort CUST.TXT | uniq > Target.TXT
檢視Target.TXT
Txt代碼

- 130000006800,17,151,01,250100
- 130000006800,17,151,01,250101
- 1300001077,17,151,01,256600
- 1300002764,17,151,01,256600
- 1300002764,17,151,01,256630
- 1300003690,17,151,01,256600
- 1300004771,17,151,01256600
- 1300006064,17,151,01,251900
- 130000693300,17,151,01370102690715295
- 1300013082,17,151,01,51700
發現 1300001077,17,151,01,256600 這條記錄隻有一條了
2 根據指定列進行去除重複行
這裡的重複是指如果兩行的某一列資料相同,則認為是重複資料
例如第1行與第2行資料根據域分隔符","分割的第一列(CUST_ID)
第4行與第5行資料也是CUST_ID 相同 現在我們如何去除列相同的重複項
第一步: sort 進行排序
第二步: 用awk對相鄰兩行資料進行比較如果第一列的資料相同則去除重複行(保留第一個相同的行,)
這裡的去除重複行 并不是真正的删除重複行而是 利用unix shell 管道 對重複行的不進行重定向輸出
Shell代碼

- sort -t, -k1 CUST.TXT | awk -F, '
- {
- $1 == CUST_ID {
- }
- $1 != CUST_ID {
- CUST_ID = $1;
- print $0;
- }' > Target.TXT
運作結果如下:
Txt代碼

- 130000006800,17,151,01,250100
- 1300001077,17,151,01,256600
- 1300002764,17,151,01,256600
- 1300003690,17,151,01,256600
- 1300004771,17,151,01256600
- 1300006064,17,151,01,251900
- 130000693300,17,151,01370102690715295
- 1300013082,17,151,01,51700
文法解釋:
sort -t, -k1
-t, 指定檔案記錄域分隔符為","
-k1 是指根據第1列進行排序
awk -F, ' {
$1 == CUST_ID {
}
$1 != CUST_ID {
CUST_ID = $1;
print $0;
} ' > Target.TXT
-F, 指定域分隔符為","
$1 == CUST_ID 判斷 第一列是否與變量 CUST_ID 相等 (不必要擔心 CUST_ID變量的值 在初始化時 awk 為 CUST_ID 指派 為"")
如果相等什麼多不做
$1 != CUST_ID { CUST_ID = $1 ;print $0;} 如果 一列不等于 CUST_ID 變量的值 将 $1 指派為 CUST_ID
然後列印 這行資料 ,然後進行下一行 比較 下一行資料與上一行資料的CUST_ID 是否相等 相等 什麼都不敢 也就是說
不列印着一行 如果不相等則列印着一行 進而起到去除重複資料的作用