Saya mencoba membandingkan dua file (Extensions.txt
dan Temp.txt
). Jika ada baris yang tidak cocok sebagian dari Extensions.txt
di Temp.txt
Saya ingin menambahkan baris yang hilang ke Temp.txt
.
Extensions.txt
(Sangat mendasar, satu kolom):
111
1234
4321
Temp.txt
:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
Pada dasarnya, yang ingin saya lakukan adalah menemukan kecocokan berdasarkan semua yang ada sebelum /
di kolom pertama dan jika tidak ada yang cocok, saya ingin mencetak baris yang tidak cocok ke bagian bawah file sehingga menjadi seperti ini:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
Sejauh ini saya telah mencoba grep -v
dan tidak memberikan hasil yang saya inginkan, saya juga mencoba dengan awk
dan sepertinya begitulah caranya, namun saya tidak memiliki pemahaman penuh tentang bagaimana awk
bekerja untuk menghasilkan hasil yang sesuai.
Jawaban yang Diterima:
Anda dapat mengurai file dengan awk
awk -F '/' '
FNR == NR {seen[$1] = $0; next}
{if ($1 in seen) print seen[$1]; else missing[$1]}
END {for (x in missing) print x}
' Temp.txt Extensions.txt
Keluaran:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
- Setel pemisah bidang menjadi garis miring,
-F '/'
- Tindakan setelah
FNR == NR
dieksekusi untuk baris file input pertama. Kami menyimpan baris dalam array asosiatifseen
sebagai kunci, dan pergi kenext
baris. - Tindakan kedua dijalankan untuk file kedua, ketika
FNR != NR
. Jika bidang pertama cocok, kami mencetak baris yang disimpan,else
kami menyimpan bidang ke dalam larik lainmissing
. - Di
END
, kami mencetak baris yang hilang.