Giới thiệu
Trong lab này, bạn sẽ học cách sử dụng lệnh join
của Linux để hợp nhất hai hoặc nhiều tệp dựa trên một trường chung. Lệnh join
là một công cụ mạnh mẽ để xử lý và chỉnh sửa văn bản, cho phép bạn kết hợp dữ liệu từ nhiều nguồn vào một đầu ra duy nhất. Bạn sẽ bắt đầu bằng cách hiểu mục đích và cú pháp của lệnh join
, sau đó thực hành nối hai tệp dựa trên các trường chung và cuối cùng học cách nối nhiều tệp bằng lệnh này. Lab này bao gồm các ví dụ thực tế và cung cấp một sự hiểu biết toàn diện về chức năng của lệnh join
, biến nó thành một kỹ năng có giá trị cho các tác vụ phân tích dữ liệu và quản lý tệp trong môi trường Linux.
Tìm hiểu Mục đích và Cú pháp của Lệnh join
Trong bước này, bạn sẽ tìm hiểu về mục đích và cú pháp của lệnh join
trong Linux. Lệnh join
được sử dụng để hợp nhất hai hoặc nhiều tệp dựa trên một trường chung.
Cú pháp cơ bản của lệnh join
là:
join [options] file1 file2
Các tùy chọn phổ biến nhất là:
-t <char>
: Chỉ định một ký tự phân tách để sử dụng thay vì khoảng trắng mặc định.-i
hoặc-I
: Bỏ qua phân biệt chữ hoa chữ thường khi so sánh các trường.-1 <field>
: Nối trên trường được chỉ định từ tệp đầu tiên.-2 <field>
: Nối trên trường được chỉ định từ tệp thứ hai.
Hãy bắt đầu bằng cách tạo hai tệp mẫu để minh họa lệnh join
:
$ cat file1.txt
1001 John
1002 Jane
1003 Bob
1004 Alice
$ cat file2.txt
1001 Sales
1002 Marketing
1003 IT
1004 HR
Ví dụ đầu ra:
1001 John Sales
1002 Jane Marketing
1003 Bob IT
1004 Alice HR
Trong ví dụ trên, lệnh join
hợp nhất hai tệp dựa trên trường đầu tiên (ID nhân viên), tạo một dòng mới cho mỗi cặp bản ghi phù hợp.
Nối Hai Tệp Dựa trên Các Trường Chung
Trong bước này, bạn sẽ học cách nối hai tệp dựa trên một trường chung bằng lệnh join
.
Hãy tạo thêm hai tệp mẫu để minh họa quy trình:
$ cat departments.txt
1001 Sales
1002 Marketing
1003 IT
1004 HR
$ cat employees.txt
1001 John
1002 Jane
1003 Bob
1004 Alice
Để nối các tệp departments.txt
và employees.txt
dựa trên trường đầu tiên (ID nhân viên), chúng ta có thể sử dụng lệnh sau:
$ join -t ' ' -1 1 -2 1 departments.txt employees.txt
1001 Sales John
1002 Marketing Jane
1003 IT Bob
1004 HR Alice
Các tùy chọn được sử dụng trong lệnh này là:
-t ' '
: Sử dụng ký tự khoảng trắng làm dấu phân cách.-1 1
: Nối trên trường đầu tiên (ID nhân viên) trong tệp đầu tiên (departments.txt
).-2 1
: Nối trên trường đầu tiên (ID nhân viên) trong tệp thứ hai (employees.txt
).
Đầu ra hiển thị các bản ghi đã hợp nhất, với phòng ban và tên nhân viên tương ứng cho mỗi ID nhân viên.
Nối Nhiều Tệp bằng Lệnh join
Trong bước cuối cùng này, bạn sẽ học cách nối nhiều tệp bằng lệnh join
.
Hãy tạo thêm một tệp mẫu để nối với các tệp trước đó:
$ cat locations.txt
1001 New York
1002 Los Angeles
1003 Chicago
1004 Miami
Để nối các tệp departments.txt
, employees.txt
và locations.txt
dựa trên trường đầu tiên (ID nhân viên), chúng ta có thể sử dụng lệnh sau:
$ join -t ' ' -1 1 -2 1 departments.txt \
| join -t ' ' -1 1 -2 1 - employees.txt \
| join -t ' ' -1 1 -2 1 - locations.txt
1001 Sales John New York
1002 Marketing Jane Los Angeles
1003 IT Bob Chicago
1004 HR Alice Miami
Trong lệnh này, chúng ta sử dụng lệnh join
ba lần, xâu chuỗi đầu ra của hai lệnh nối đầu tiên làm đầu vào cho lệnh nối thứ ba. Điều này cho phép chúng ta hợp nhất cả ba tệp dựa trên trường ID nhân viên chung.
Các tùy chọn được sử dụng trong lệnh này giống như bước trước:
-t ' '
: Sử dụng ký tự khoảng trắng làm dấu phân cách.-1 1
: Nối trên trường đầu tiên (ID nhân viên) trong tệp đầu tiên.-2 1
: Nối trên trường đầu tiên (ID nhân viên) trong tệp thứ hai.
Đầu ra cuối cùng hiển thị các bản ghi đã hợp nhất, với phòng ban, tên nhân viên và địa điểm tương ứng cho mỗi ID nhân viên.
Tóm tắt
Trong lab này, bạn đã tìm hiểu về mục đích và cú pháp của lệnh join
trong Linux, được sử dụng để hợp nhất hai hoặc nhiều tệp dựa trên một trường chung. Bạn bắt đầu bằng cách tạo các tệp mẫu và hiểu cú pháp cơ bản của lệnh join
, bao gồm việc sử dụng các tùy chọn như -t
, -i
, -1
và -2
để chỉ định dấu phân cách, bỏ qua phân biệt chữ hoa chữ thường và chọn các trường để nối. Sau đó, bạn đã thực hành nối hai tệp dựa trên một trường chung, chứng minh cách lệnh join
có thể hợp nhất các bản ghi từ các tệp khác nhau thành một đầu ra duy nhất.