Bagaimana saya bisa menghapus teks dari baris setelah karakter tertentu dengan awk


12

Bagaimana saya bisa menggunakan awk untuk menghapus semua teks setelah karakter tertentu ";" yang muncul di setiap baris file teks saya? (Saya kemudian perlu menjalankan untuk loop pada teks)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
Tolong tunjukkan pada kami file teks yang sebenarnya, iblis ada di detail dengan hal semacam ini
terdon

Saya memberi contoh sekarang @terdon
Jenny

Jawaban:


18

Ada dua pendekatan umum.

  1. Set awkpemisah bidang ke karakter itu. Anda kemudian bisa mendapatkan bagian yang Anda inginkan sebagai $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Gunakan gsub()untuk menggantinya dengan string kosong:

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

Jadi, untuk contoh Anda:

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

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

Inilah jawaban dengan sed- karena Anda tidak benar-benar melakukan pemrosesan lapangan, awk mungkin berlebihan.

sed 's/;.*//'

1
+1 tetapi berdasarkan komentar OP , saya berasumsi ini semua adalah bagian dari skrip yang lebih besar. @ Jenny, itu jenis detail yang harus Anda sertakan dalam pertanyaan Anda.
terdon


0

Terkadang Anda mungkin ingin mengganti semua karakter setelah kata tertentu dengan string lain. Sebagai contoh:

original_string="abc blabla foo bar" dan Anda ingin mengganti kata setelah blabla dengan 'hello world'

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.