Saya mencoba mencari solusi untuk pertanyaan ini . Saya ingin menggunakan awk
untuk solusinya.
File input saya adalah seperti di bawah ini.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Saya menggunakan awk
perintah untuk mengekstrak nilai kedua setelah _
seperti di bawah ini.
awk -F "_" '{print $2}' file
Namun, meskipun perintah di atas mencetak nilai yang benar, saya mendapatkan garis kosong di output saya. Saya punya 2 pertanyaan.
pertanyaan 1
Bagaimana saya bisa menghapus garis kosong di output sehingga saya hanya mendapatkan venkat
dan venkat3
di output?
Jika saya menggunakan printf
alih-alih print
dalam awk
, saya mendapatkan venkatvenkat3
sebagai output yang tidak ingin saya capai. Saya ingin output seperti,
venkat
venkat3
Pertanyaan 2
Menggunakan nilai-nilai itu sebagai array asosiatif atau sesuatu, bagaimana saya bisa menemukan jika nilai-nilai itu benar-benar muncul di $1
kolom?
Saya ingin mencapai sesuatu seperti,
awk -F "_" '$2==1{print $1}' file
EDIT
Saya tidak memperhatikan awk
solusi Stephane. Apakah ia melakukan hal yang sama dengan yang saya sebutkan?
awk
tidak melakukan hal yang sama. Pendekatan Anda mengasumsikan bahwa sebuah kata hanya dapat dimuat dalam kata lain jika dipisahkan oleh_
. Meskipun itu benar untuk contoh OP, semua jawaban yang diposting juga menangani kasus sepertidoglion
dan tidak hanyadog_lion
.Jawaban:
Pertanyaan 1
Pertanyaan2
sumber
venkat
danvenkat3
sesuai OP bertanya dalam pertanyaan lain. Saya mencoba mencari apakah kunci setelah_
ada di$1
kolom saya .untuk Pertanyaan 1, Anda dapat menggunakan opsi
--only-delimited
(-s
) daricut
sumber
Pendekatan lain:
pertanyaan 1
Ini hanya akan mencetak jika
$2
sudah ditentukan. Ini adalah cara penulisan yang lebih pendek:Pertanyaan 2
Tidak perlu menambahkan apa pun yang belum ditangani.
sumber
pertanyaan 1
pertanyaan 2
sumber
venkat
danvenkat3
sebagai output karena mereka hadir$1
. Namun, saya mendapatkan semua$1
nilai sesuai perintah Anda.$2
entri yang telah$2
terjadi di kolom 1. Apakah ini benar?