Làm cách nào tôi có thể xóa văn bản khỏi một dòng sau một ký tự nhất định với awk


12

Làm cách nào tôi có thể sử dụng awk để xóa tất cả văn bản sau một ký tự nhất định ";" xuất hiện trên mỗi dòng của tập tin văn bản của tôi? (Sau đó tôi cần chạy các vòng lặp trên văn bản)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
Vui lòng cho chúng tôi xem tệp văn bản thực tế, ma quỷ trong các chi tiết với loại điều này.
terdon

Tôi đã đưa ra một ví dụ bây giờ @terdon
Jenny

Câu trả lời:


18

Có hai cách tiếp cận chung.

  1. Đặt awkdấu tách trường cho ký tự đó. Sau đó, bạn có thể nhận được các phần bạn muốn như $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Sử dụng gsub()để thay thế nó bằng một chuỗi rỗng:

    $ echo "Today was cloudy; yesterday too" | awk '{sub(/;.*/,""); print}'
    Today was cloudy

Vì vậy, ví dụ của bạn:

$ awk -F';' '{print $1}' file
Jenny,Sarah,John

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

Đây là một câu trả lời với sed- vì bạn không thực sự xử lý trường nào, awk có lẽ là quá mức cần thiết.

sed 's/;.*//'

1
+1 nhưng dựa trên nhận xét của OP , tôi cho rằng đây là một phần của tập lệnh lớn hơn. @Jenny, đó là loại chi tiết bạn nên đưa vào câu hỏi của bạn.
terdon


0

Đôi khi bạn có thể muốn thay thế tất cả các ký tự sau một từ nhất định bằng một chuỗi khác. Ví dụ:

original_string="abc blabla foo bar" và bạn muốn thay thế các từ sau blabla bằng 'hello world'

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.