Cách sử dụng lệnh wc trong Linux

Cach su dung lenh wc trong Linux
Bình chọn post

[ad_1]

fatmawati achmad zaenuri / Shutterstock.com

Đếm số dòng, từ và byte trong một tệp là hữu ích, nhưng tính linh hoạt thực sự của Linux wc lệnh đến từ việc làm việc với các lệnh khác. Chúng ta hãy xem xét.

Lệnh wc là gì?

Các wc lệnh là một ứng dụng nhỏ. Đây là một trong những tiện ích cốt lõi của Linux, vì vậy không cần phải cài đặt nó. Nó sẽ có trên máy tính Linux của bạn.

Bạn Đang Xem: Cách sử dụng lệnh wc trong Linux

Bạn có thể mô tả những gì nó làm trong một vài từ. Nó đếm các dòng, từ và byte trong một tệp hoặc lựa chọn các tệp và in kết quả trong cửa sổ đầu cuối. Nó cũng có thể lấy đầu vào từ luồng STDIN, nghĩa là văn bản bạn muốn nó xử lý có thể được đưa vào đó. Đây là đâu wc thực sự bắt đầu gia tăng giá trị.

Đó là một ví dụ tuyệt vời về câu thần chú của Linux về “làm một việc và làm tốt”. Bởi vì nó chấp nhận đầu vào theo đường ống, nó có thể được sử dụng trong các câu thần chú đa lệnh. Như chúng ta sẽ thấy, tiện ích độc lập nhỏ này thực sự là một người chơi đồng đội tuyệt vời.

Một cách tôi sử dụng wc là trình giữ chỗ trong một lệnh phức tạp hoặc bí danh mà tôi đang chuẩn bị. Nếu lệnh hoàn thành có khả năng phá hủy và xóa tệp, tôi thường sử dụng wc như một chỗ đứng cho lệnh thực sự nguy hiểm.

Bằng cách đó, trong quá trình phát triển lệnh, tôi nhận được phản hồi trực quan rằng mỗi tệp đang được xử lý như tôi mong đợi. Không có khả năng xảy ra bất cứ điều gì xấu trong khi tôi đang vật lộn với cú pháp.

Đơn giản như wc là, vẫn còn một số điều kỳ quặc nhỏ mà bạn cần biết.

Bắt đầu với wc

Cách đơn giản nhất để sử dụng wc là chuyển tên của một tệp văn bản trên dòng lệnh.

wc lorem.txt

Sử dụng wc với một tệp có một dòng văn bản dài

Điều này gây ra wc để quét tệp và đếm các dòng, từ, byte và ghi chúng ra cửa sổ dòng lệnh.

Các từ được coi là bất cứ thứ gì bị giới hạn bởi khoảng trắng. Cho dù chúng có phải là các từ từ một ngôn ngữ thực hay không là không liên quan. Nếu một tệp không chứa gì ngoài “frd g lkj”, nó vẫn được tính là ba từ.

Dòng là chuỗi các ký tự được kết thúc bằng ký tự xuống dòng hoặc cuối tệp. Không quan trọng nếu dòng bao quanh trong trình chỉnh sửa của bạn hoặc trong cửa sổ đầu cuối, cho đến khi wc gặp dấu xuống dòng hoặc cuối tệp, nó vẫn ở cùng một dòng.

Ví dụ đầu tiên của chúng tôi tìm thấy một dòng trong toàn bộ tệp. Đây là nội dung của tệp “lorem.txt”.

cat lorem.txt

Nội dung của tệp với một dòng dài

Tất cả những thứ đó được tính là một dòng vì không có ký tự xuống dòng nào. So sánh tệp này với tệp khác, “lorem2.txt” và cách wc diễn giải nó.

wc lorem2.txt
cat lorem2.txt

Sử dụng wc với một tệp có nhiều dòng

Thời gian này, wc đếm 15 dòng vì ký tự xuống dòng đã được chèn vào văn bản để bắt đầu một dòng mới tại các điểm cụ thể. Tuy nhiên, nếu bạn đếm các dòng có văn bản trong đó, bạn sẽ thấy chỉ có 12 dòng.

Ba dòng còn lại là dòng trống ở cuối tệp. Chúng chỉ chứa các ký tự xuống dòng. Mặc dù không có văn bản nào trong những dòng này, một dòng mới đã được bắt đầu và như vậy wc đếm chúng như vậy.

Chúng tôi có thể chuyển bao nhiêu tệp đến wc như chúng tôi muốn.

wc lorem.txt lorem2.txt

Sử dụng wc với hai tệp

Chúng tôi nhận thống kê cho từng tệp riêng lẻ và tổng số cho tất cả các tệp.

Xem Thêm : Cách tìm kiếm đệ quy tên thư mục trong Linux

Chúng tôi cũng có thể sử dụng các ký tự đại diện để có thể chọn các tệp phù hợp thay vì các tệp được đặt tên rõ ràng.

wc *.txt *.?

Sử dụng wc với ký tự đại diện

Các tùy chọn dòng lệnh

Theo mặc định, wc sẽ hiển thị các dòng, từ và byte trong mỗi tệp. Nó cũng giống như việc sử dụng -l (dòng) -w (lời nói) và -c (byte) tùy chọn.

wc lorem.txt
wc -l -w -c lorem.txt

Sử dụng wc với các tùy chọn dòng, từ và byte

Chúng tôi có thể chỉ định sự kết hợp của các số liệu mà chúng tôi muốn xem.

wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt

Sử dụng wc với sự kết hợp của các tùy chọn

Cần chú ý đặc biệt đến con số cuối cùng, được tạo ra bởi -c (byte) tùy chọn. Nhiều người nhầm đây là đếm các ký tự. Nó thực sự tính byte. Số ký tự và số byte cũng có thể giống nhau. Nhưng không phải lúc nào cũng vậy.

Hãy xem nội dung của một tệp có tên “unicode.txt”.

cat unicode.txt

Nội dung của tệp chứa ký tự không phải là ký tự Latinh

Nó có ba từ và một ký tự không thuộc bảng chữ cái Latinh. Tốt để cho wc xử lý tệp với cài đặt mặc định của nó là bytevà chúng tôi sẽ làm lại nhưng yêu cầu nhân vật với -m (ký tự) tùy chọn.

wc unicode.txt
wc -l -w -m unicode.txt

Đếm các byte trong một tệp và sau đó đếm các ký tự trong cùng một tệp

Có nhiều byte hơn số ký tự.

Hãy xem kết xuất hex của tệp và xem điều gì đang xảy ra. Các hexdump lệnh của -C (canonical) hiển thị các byte trong tệp trong các dòng 16, với ASCII đơn giản tương đương của chúng (nếu có) được hiển thị ở cuối dòng. Nếu không có ký tự ASCII tương ứng, dấu chấm “.”Được hiển thị thay thế.

hexdump -C unicode.txt

Một tệp hexdump của một tệp ngắn có ký tự không phải Latinh

Trong ASCII, giá trị thập lục phân của 0x20 đại diện cho một ký tự khoảng trắng. Nếu chúng ta đếm ba giá trị từ bên trái, chúng ta thấy giá trị tiếp theo là một ký tự khoảng trắng. Vì vậy, ba giá trị đầu tiên đó 0x62, 0x6f0x79 đại diện cho các chữ cái trong “cậu bé”.

Nhảy qua 0x20chúng tôi thấy một bộ ba giá trị thập lục phân khác: 0x63, 0x610x74. Chúng đánh vần là “mèo.” Nhảy qua ký tự khoảng trắng tiếp theo, chúng ta thấy thêm ba giá trị nữa cho các chữ cái trong “dog”. đó là 0x64, 0x5f0x67.

Ngay sau từ “dog”, chúng ta có thể thấy một ký tự khoảng trắng 0x20và năm giá trị thập lục phân khác. Hai cách cuối cùng là ký tự xuống dòng, 0x0a.

Ba byte còn lại đại diện cho ký tự không phải Latinh, mà chúng tôi đã đánh dấu màu xanh lục. Nó là một ký tự Unicode và cần ba byte để mã hóa nó. đó là 0xe1, 0xaf0x8a.

Vì vậy, hãy đảm bảo rằng bạn biết mình đang đếm những gì và byte và ký tự không cần giống nhau. Thông thường, việc đếm byte hữu ích hơn vì nó cho bạn biết điều gì thực sự là nội bộ tập tin. Đếm theo ký tự cung cấp cho bạn số thứ đại diện bởi nội dung của tệp.

CÓ LIÊN QUAN: Mã hóa ký tự như ANSI và Unicode là gì, và chúng khác nhau như thế nào?

Lấy tên tệp từ tệp

Có một cách khác để cung cấp tên tệp cho wc . Bạn có thể đặt tên tệp vào một tệp và chuyển tên của cái đó nộp cho wc. Nó mở tệp, trích xuất tên tệp và xử lý chúng như thể chúng đã được chuyển qua dòng lệnh. Điều này cho phép bạn lưu trữ một bộ sưu tập tên tệp tùy ý để sử dụng lại.

Xem Thêm : Định dạng hình ảnh AVIF là gì?

Nhưng có một gotcha, và nó là một thứ lớn. Tên tệp phải là vô giá trị chấm dứt, không phải vận chuyển trở lại chấm dứt. Nghĩa là, sau mỗi tên tệp phải có một byte rỗng của 0x00 thay vì byte trả về dòng thông thường 0x0a.

Bạn không thể mở trình chỉnh sửa và tạo tệp có định dạng này. Thông thường, các tệp như thế này được tạo bởi các chương trình khác. Nhưng, nếu bạn có một tệp như vậy, đây là cách bạn sẽ sử dụng nó.

Đây là tệp của chúng tôi chứa các tên tệp. Mở nó trong less cho bạn thấy điều kỳ lạ “^@”Ký tự less sử dụng để chỉ byte rỗng.

less source-files-list.txt

Một tệp nhỏ hơn chứa byte rỗng

Để sử dụng tệp với wcchúng ta cần sử dụng --files0-from (đọc đầu vào từ) và chuyển vào tên của tệp có chứa tên tệp.

wc ---files0-from=source-files-list.txt

wc xử lý tệp gồm các tên tệp bị chấm dứt rỗng

Các tệp được xử lý chính xác như thể chúng được cung cấp trên dòng lệnh.

Piping Input to wc

Một cách phổ biến, linh hoạt và hiệu quả hơn nhiều để gửi thông tin đầu vào wc là chuyển đầu ra từ các lệnh khác vào wc . Chúng tôi có thể chứng minh điều này với echo yêu cầu.

echo "Count this for me" | wc
echo -e "Count thisnfor me" | wc

Sử dụng echo để gửi đầu vào đến wc

Thư hai echo lệnh sử dụng -e (các ký tự thoát) để cho phép các chuỗi thoát như “n”Mã định dạng dòng mới. Điều này tạo ra một dòng mới, gây ra wc để xem đầu vào là hai dòng.

Đây là một loạt các lệnh cung cấp đầu vào của chúng từ cái này sang cái khác.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq
  • tìm thấy tìm kiếm các tệp (type -f) đệ quy, bắt đầu trong thư mục hiện tại. rev đảo ngược tên tệp.
  • cắt trích xuất trường đầu tiên (-f1) bằng cách xác định dấu phân cách trường là một dấu chấm “.”Và đọc từ“ mặt trước ”của tên tệp đã đảo ngược cho đến khoảng thời gian đầu tiên mà nó tìm thấy. Bây giờ chúng tôi đã giải nén phần mở rộng tệp.
  • vòng quay đảo ngược trường đầu tiên được trích xuất.
  • loại sắp xếp chúng theo thứ tự bảng chữ cái tăng dần.
  • uniq liệt kê các mục nhập duy nhất vào cửa sổ đầu cuối.

Danh sách các tiện ích mở rộng duy nhất trong cây thư mục hiện tại

Lệnh này liệt kê tất cả các phần mở rộng tệp duy nhất trong thư mục hiện tại và bất kỳ thư mục con nào.

Nếu chúng tôi thêm -c (đếm) tùy chọn uniq lệnh nó sẽ đếm lần xuất hiện của mỗi loại tiện ích mở rộng. Nhưng nếu chúng ta muốn biết có bao nhiêu phần mở rộng tệp khác nhau, duy nhất, chúng ta có thể bỏ wc là lệnh cuối cùng trên dòng và sử dụng -l (dòng) tùy chọn.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l

Thêm wc để đếm các tiện ích mở rộng duy nhất

CÓ LIÊN QUAN: Cách sử dụng lệnh cắt trong Linux

Và cuối cùng

Đây là một mẹo cuối cùng wc có thể làm cho bạn. Nó sẽ cho bạn biết độ dài của dòng dài nhất trong một tệp. Đáng buồn thay, nó không cho bạn biết đó là dòng nào. Nó chỉ cung cấp cho bạn chiều dài.

wc -L taf.c

Lấy độ dài của dòng dài nhất trong tệp với wc

Tuy nhiên, hãy cẩn thận, các tab đó được tính là tám khoảng trắng. Được xem trong trình chỉnh sửa của tôi, có ba tab hai dấu cách ở đầu dòng đó. Độ dài thực của nó là 124 ký tự. Vì vậy, con số được báo cáo được mở rộng một cách giả tạo.

Tôi sẽ xử lý chức năng này với một nhúm muối lớn. Và ý tôi là đừng sử dụng nó. Đầu ra của nó bị sai lệch.

Bất chấp những điều kỳ quặc của nó, wc là một công cụ tuyệt vời để đưa vào các lệnh có khung khi bạn cần đếm tất cả các loại giá trị, không chỉ các từ trong tệp.

CÓ LIÊN QUAN: 37 lệnh quan trọng trong Linux bạn nên biết


[ad_2]

Nguồn: https://maytinhvang.com
Danh mục: TIN HỌC

Bài viết liên quan

0903064855
chat-active-icon