Sử dụng câu lệnh uniq để xử lí danh sách

Chia sẻ

Bạn có thể đã biết tới câu lệnh sort từ trước, nhưng khi sắp xếp một file bất kì thường đi tới kết quả là có quá nhiều hàng trùng lặp liền kề với nhau và trở nên khó khăn để xem và xử lí các dòng đó.
Về mặt kịch bản, câu lệnh uniq giúp chúng ta chỉ in các dòng trùng lặp 1 lần ở output. Công cụ này thường bỏ qua những lines trùng lặp và chỉ in ra Terminal một lần đối với những dòng đó, giúp chúng ta xem output một cách gọn gàng hơn

Các dòng trong tệp cần xử lí bởi uniq command không được dài quá 2048 bytes (Bao gồm bất cứ kí tự mới nào) cũng như không được chứa kí tự null

Cú pháp

uniq [OPTION]... [INPUT [OUTPUT]]

Ví dụ

Dưới đây là một số ví dụ và chúng ta sẽ đi qua một vài trường hợp cụ thể. Một số thì chỉ cần dùng uniq, còn một số thì cần phải dùng thêm những câu lệnh khác nữa

Với không có tuỳ chọn nào cả

Dưới đây là một file có tên là file2, nó chứa một vài dữ liệu bạn có thể xem phía dưới và nó chưa được sắp xếp theo một thứ tự nhất định, và những dòng trùng lặp cũng chưa đứng kề nhau. Trước khi dùng câu lệnh uniq với file này, chúng ta nên thử sort nó. Tôi đã thử dùng câu lệnh uniq với file gốc, nhưng nó chỉ in output ra như dùng lệnh cat và gần như không có tác dụng gì nhiều. Ở ví dụ tiếp theo tôi đã dùng câu lệnh sort để xử lí files đó trước và dùng câu lệnh uniq ngay sau. Chúng ta sẽ hiểu được cách câu lệnh uniq xử lí file như thế nào

$ cat file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ uniq file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ sort file2
Budhha
Budhha
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
$ sort file2 | uniq
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar

Với tuỳ chọn -c, –count

Tham số -c cho phép chúng ta đếm số lần lặp lại của một dòng bất kì. Uniq sẽ in ra số lần lặp lại của dòng ở đầu dòng đó

$ sort file2 | uniq -c
3 Budhha
1 ChhatrapatiShahuMaharaj
3 Dr.B.R.Ambedkar

Với tuỳ chọn -d, –repeated option

Tham số -d chỉ in ra những dòng được lặp lại (Chỉ in ra 1 lần) và bỏ qua các dòng không bị lặp lại

$ sort file2 | uniq -d
Budhha
Dr.B.R.Ambedkar

Ở ví dụ dưới. Tôi đã sử dụng kèm với tham số -c để kiểm tra rằng có phải tham số -d khiến uniq chỉ in ra những hàng được lặp lại hay không

$ sort file2 | uniq -cd
3 Budhha
3 Dr.B.R.Ambedkar

Với tuỳ chọn -D, –all-repeated option

Tham số -D sẽ in ra nhữn dòng được lặp lại (Lặp lại bao nhiêu lần in ra bấy nhiêu lần) và cũng bỏ qua các dòng không bị lặp lại

$ sort file2 | uniq -D
Budhha
Budhha
Budhha
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar

Với tuỳ chọn -u, –unique

Tham số -u sẽ chỉ in ra những dòng chỉ xuất hiện một lần, không in ra các dòng bị lặp lại

$ sort file2 | uniq -u
ChhatrapatiShahuMaharaj

Với tuỳ chọn -i, –ignore-case

Với tuỳ chọn -i bạn có thể bỏ qua sự phân biệt hoa/thường của kí tự. Dưới đây là ví dụ khi dùng uniq có tham số -i và không có -i

$ cat file3
aaaa
aaaa
AAAA
AAAA
bbbb
BBBB
$ uniq file3
aaaa
AAAA
bbbb
BBBB
$ uniq -i file3
aaaa
bbbb

Với tuỳ chọn -f, –skip-fields=N

Đôi khi chúng ta cần bỏ qua một số fields để lọc ra các dòng trùng nhau. Điều này có thể sử dụng tham số -f. Trong ví dụ ở dưới, chúng ta sẽ bỏ qua fields đầu tiên (Cột thứ nhất) để so sánh các dòng trùng lặp từ fields thứ hai. Tôi sẽ đưa ra cả 2 ví dụ có và không có tham số -f, để giúp các bạn dễ hiểu hơn

$ cat file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq -f 1 file5
Amit aaaa
Advi bbbb

Với tuỳ chọn -s, –skip-char=N

Như đối với field, chúng ta có thể bỏ qua kí tự bằng cách sử dụng tuỳ chọn -s. Hãy lưu ý trong đầu rằng nếu một dòng bị lặp thì uniq chỉ in ra dòng xuất hiện đầu tiên và bỏ qua các dòng còn lại. Vì vậy 33aa và 55bb đã bị loại bỏ. Đây là ví dụ

$ cat file4
22aa
33aa
44bb
55bb
$ uniq file4
22aa
33aa
44bb
55bb
$ uniq -s 2 file4
22aa
44bb

Với tuỳ chọn -w, –check-chars=N

Như việc bỏ qua các kí tự, chúng ta có thể chọn chỉ xem xét một kí tụ cụ thể sử dụng tham số -w, đây là một ví dụ

$ cat file6
aa12
aa34
bb56
bb78
$ uniq file6
aa12
aa34
bb56
bb78
$ uniq -w 2 file6
aa12
bb56

Với tuỳ chọn –version

Tuỳ chọn –version giúp bạn xem phiên bản của uniq, đơn giản vậy thôi

uniq --version
uniq (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Richard M. Stallman and David MacKenzie.

Bảng tổng hợp


Được dịch từ RedHat

Chia sẻ

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *