Saya ingin menulis shell script
yang mendapatkan dua file A
dan B
, dan mendapatkan hasil seperti ini:
File A
:
user_a tel_a addr_a
user_b tel_b addr_b
File B
:
process_1 user_a
process_2 user_a
process_3 user_b
Dan hasilnya:
user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b
Bagaimana saya bisa melakukan ini? awk
atau sesuatu yang lain?
text-processing
awk
join
Navid Farhadi
sumber
sumber
cut
danpaste
hanya, tapi saya tidak mendapatkan synthax yang benar.cut
danpaste
lihat halaman manual mereka.Jawaban:
join
...Keluaran
File input perlu diurutkan berdasarkan bidang kunci ... File contoh Anda sudah diurutkan, jadi tidak perlu, tetapi jika tidak, Anda bisa memasukkan sortir sebagai berikut.
sumber
man join
ke baris perintah terminal ...-1 2 -2 1
berarti: bergabung di 'file ke-2 file-ke-2' dan ' 2-file 1st-field 'Karena
join
danpaste
tidak tersedia di mana-mana (mereka tidak ada di sistem berbasis BusyBox saya, misalnya), berikut adalah cara melakukannya dengan awk, seperti yang diminta:sumber
A[$1]=$2 OFS $3
... Ini adalah varian lain yang menghindari loop manual di BEGIN, tapi itu hampir sama (untuk awk ), meskipun tidak memperkenalkan tes kondisi yang tidak perlu untuk file kedua:awk 'NR==FNR {A[$1]=$2 OFS $3;next} {print $2, $1, A[$2]}' fileA fileB
... (+ 1)