AWK NF là gì?

Awk Nf La Gi



Ngôn ngữ kịch bản AWK cũng có một loạt các biến đặc biệt tích hợp sẵn để phục vụ một số mục đích được xác định trước. Một biến tích hợp như vậy là “NF” có chức năng được xác định trước của riêng nó. Bài viết này sẽ khám phá mục đích của biến AWK tích hợp này bằng cách trình bày một số ví dụ có liên quan trong Ubuntu 20.04.

AWK NF trong Ubuntu 20.04:

Biến AWK “NF” được sử dụng để in số trường trong tất cả các dòng của bất kỳ tệp được cung cấp nào. Biến tích hợp sẵn này lặp lại lần lượt qua tất cả các dòng của tệp và in số lượng trường riêng cho từng dòng. Để hiểu rõ chức năng này, bạn sẽ phải đọc qua các ví dụ được thảo luận bên dưới.

Ví dụ minh họa cách sử dụng AWK NF trong Ubuntu 20.04:

Bốn ví dụ sau được thiết kế theo cách hướng dẫn bạn cách sử dụng AWK NF theo cách rất dễ hiểu. Tất cả những ví dụ này đã được triển khai bằng hệ điều hành Ubuntu 20.04.







Ví dụ #1: In Số lượng Trường từ Mỗi Dòng của Tệp Văn bản:

Trong ví dụ này, chúng tôi muốn in số trường hoặc số cột của mỗi dòng hoặc hàng hoặc bản ghi của tệp văn bản trong Ubuntu 20.04. Để hiển thị cho bạn phương pháp làm như vậy, chúng tôi đã tạo tệp văn bản được hiển thị trong hình ảnh bên dưới. Tệp văn bản này chứa tỷ lệ táo trên một kilôgam từ năm thành phố khác nhau của Pakistan.





Khi chúng tôi đã tạo tệp văn bản mẫu này, chúng tôi đã thực hiện lệnh sau để in số lượng trường từ mỗi dòng của tệp văn bản này trong thiết bị đầu cuối của chúng tôi:





$ awk ' { in NF } ’ AppleRates.txt

Trong lệnh này, chúng tôi có từ khóa “awk” cho thấy rằng chúng tôi đang chạy lệnh AWK, theo sau là câu lệnh “print NF”, lệnh này sẽ chỉ lặp qua từng dòng của tệp văn bản đích và sẽ in số lượng trường riêng cho từng dòng dòng của tệp văn bản. Cuối cùng, chúng tôi có tên của tệp văn bản đó (có các trường sẽ được tính), trong trường hợp của chúng tôi là “AppleRatest.txt”.



Vì chúng tôi có cùng một số trường cho tất cả năm dòng của tệp văn bản của mình, tức là 2, nên cùng một số được in dưới dạng số trường cho tất cả các dòng tệp văn bản do thực thi lệnh này. Điều này có thể được nhìn thấy từ hình ảnh dưới đây:

Ví dụ # 2: In số lượng trường từ mỗi dòng của tệp văn bản theo cách có thể trình bày được:

Đầu ra được hiển thị trong ví dụ được thảo luận ở trên cũng có thể được trình bày độc đáo bằng cách hiển thị số dòng và số trường của mỗi dòng của tệp văn bản. Hơn nữa, chúng ta cũng có thể tách số dòng khỏi số trường bằng bất kỳ ký tự đặc biệt nào mà chúng ta chọn. Chúng tôi sẽ sử dụng cùng một tệp văn bản mà chúng tôi đã sử dụng cho ví dụ đầu tiên để cho bạn thấy điều này. Tuy nhiên, lệnh của chúng ta sẽ được thực thi trong trường hợp này sẽ hơi khác một chút và như sau:

$ awk ' { in NR, “---”, NF } ’ AppleRates.txt

Trong lệnh này, chúng tôi đã giới thiệu biến AWK tích hợp “NR” sẽ chỉ in số dòng của tất cả các dòng trong tệp văn bản đích của chúng tôi. Ngoài ra, chúng tôi đã sử dụng ba dấu gạch ngang, “—” làm ký tự đặc biệt để phân tách số dòng khỏi số trường của tệp văn bản được cung cấp của chúng tôi.

Đầu ra được sửa đổi một chút này của cùng một tệp văn bản được hiển thị trong hình bên dưới:

Ví dụ #3: In Trường Đầu tiên và Cuối cùng từ Mỗi Dòng của Tệp Văn bản:

Ngoài việc chỉ đếm số trường của tất cả các dòng của tệp văn bản được cung cấp, biến đặc biệt “NF” của AWK cũng có thể được sử dụng để trích xuất các giá trị thực của trường cuối cùng từ tệp văn bản được cung cấp. Một lần nữa, chúng tôi đã sử dụng cùng một tệp văn bản mà chúng tôi đã sử dụng cho hai ví dụ đầu tiên của mình. Tuy nhiên, chúng tôi muốn in các giá trị thực của trường đầu tiên và trường cuối cùng của tệp văn bản trong ví dụ này. Đối với điều đó, chúng tôi đã thực hiện lệnh sau:

$ awk ' { in $1 , $NF } ’ AppleRates.txt

Từ khóa “awk” được theo sau bởi câu lệnh “print $1, $NF” trong lệnh này. Biến đặc biệt “$1” đã được sử dụng để in các giá trị của trường đầu tiên hoặc cột đầu tiên của tệp văn bản được cung cấp của chúng tôi, trong khi biến AWK “$NF” đã được sử dụng để in các giá trị của trường cuối cùng hoặc cột cuối cùng của tệp văn bản mục tiêu của chúng tôi. Ở đây bạn cần lưu ý rằng khi chúng ta sử dụng biến AWK “NF” như hiện tại, thì nó được sử dụng để đếm số lượng trường của mỗi dòng; tuy nhiên, khi nó được sử dụng với biểu tượng đô la “$”, thì nó sẽ chỉ trích xuất các giá trị thực tế từ trường cuối cùng của tệp văn bản được cung cấp. Phần còn lại của lệnh ít nhiều giống với lệnh đã được sử dụng cho hai ví dụ đầu tiên.

Trong kết quả hiển thị bên dưới, bạn có thể thấy rằng các giá trị thực tế từ trường đầu tiên và trường cuối cùng của tệp văn bản được cung cấp của chúng tôi đã được in trên thiết bị đầu cuối. Bạn có thể thấy rằng đầu ra này khá giống với đầu ra của lệnh “cat” chỉ vì chúng tôi chỉ có hai trường trong tệp văn bản được cung cấp của mình; do đó, theo một cách nào đó, nội dung của toàn bộ tệp văn bản của chúng tôi đã được in trên thiết bị đầu cuối do thực hiện lệnh nêu trên.

Ví dụ #4: Tách các Bản ghi có Trường bị Thiếu trong Tệp Văn bản:

Đôi khi, có một số bản ghi trong tệp văn bản bị thiếu một số trường nhất định và bạn có thể muốn tách những bản ghi đó khỏi những bản ghi hoàn chỉnh ở mọi khía cạnh. Điều này cũng có thể được thực hiện bằng cách sử dụng biến AWK “NF”. Để làm được điều đó, chúng tôi đã tạo một tệp văn bản có tên “ExamMarks.txt” chứa điểm thi của năm học sinh khác nhau trong ba kỳ thi khác nhau cùng với tên của họ. Tuy nhiên, đến buổi thi thứ ba, một số học sinh vắng mặt do bị thiếu điểm. Tệp văn bản này như sau:

Để phân biệt các bản ghi có các trường bị thiếu với các bản ghi có các trường đầy đủ, chúng tôi sẽ thực hiện lệnh hiển thị bên dưới:

$ awk ' { in NR, “--- > ”, NF } ’ ExamMarks.txt

Lệnh này giống với lệnh mà chúng ta đã sử dụng cho ví dụ thứ hai. Tuy nhiên, từ đầu ra của lệnh này được hiển thị trong hình ảnh sau đây, bạn có thể thấy rằng bản ghi thứ nhất và thứ tư đã hoàn tất, trong khi bản ghi thứ hai, thứ ba và thứ năm chứa các trường bị thiếu.

Sự kết luận:

Mục đích của bài viết này là giải thích cách sử dụng biến đặc biệt AWK “NF”. Đầu tiên, chúng tôi thảo luận ngắn gọn về cách thức hoạt động của biến này và sau đó, chúng tôi xây dựng khái niệm này một cách chi tiết với sự trợ giúp của bốn ví dụ khác nhau. Khi bạn hiểu rõ tất cả các ví dụ được chia sẻ, bạn sẽ có thể sử dụng biến AWK “NF” để đếm tổng số trường và in các giá trị thực của trường cuối cùng của tệp được cung cấp.