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
Jenny
sumber
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
terdon
sumber
4

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

sed 's/;.*//'
Chris Down
sumber
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
4

Dan juga hanya cut..

cut -d\; -f1 file
Pengamat
sumber
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/'
Kemin Zhou
sumber