File1.txt
item1 carA
item2 carB
item3 carC
item4 platD
item5 carE
File2.txt
carA platA
carB platB
carC platC
carE platE
Output yang diinginkan:
item1 platA
item2 platB
item3 platC
item4 platD
item5 platE
Bagaimana saya bisa melakukannya?
command-line
text-processing
awk
pawana
sumber
sumber
Saya tahu Anda berkata
awk
, tetapi adajoin
perintah untuk tujuan ini ...Itu sudah cukup dengan
join
perintah pertama jika bukan karena baris ini:Perintah pada dasarnya mengatakan: join berdasarkan kolom kedua dari file pertama (
-1 2
), dan kolom pertama dari file kedua (-2 1
), dan output kolom pertama dari file pertama dan kolom kedua dari file kedua (-o 1.1,2.2
). Itu hanya menunjukkan garis yang dipasangkan. Perintah gabungan kedua mengatakan hal yang hampir sama, tetapi dikatakan untuk menunjukkan baris dari file pertama yang tidak dapat dipasangkan (-v 1
), dan menampilkan kolom pertama dari file pertama dan kolom kedua dari file pertama (-o 1.1,1.2
). Kemudian kami mengurutkan hasil dari keduanya.sort -k 1
berarti mengurutkan berdasarkan kolom pertama, dansort -k 2
berarti mengurutkan berdasarkan yang kedua. Penting untuk mengurutkan file berdasarkan kolom bergabung sebelum meneruskannyajoin
.Sekarang, saya menulis penyortiran dua kali, karena saya tidak suka mengotori direktori saya dengan file jika saya dapat membantu. Namun, seperti yang dikatakan David Foerster, tergantung pada ukuran file, Anda mungkin ingin mengurutkan file dan menyimpannya terlebih dahulu agar tidak perlu menunggu untuk mengurutkan masing-masing dua kali. Untuk memberikan gambaran tentang ukuran, inilah waktu yang diperlukan untuk mengurutkan 1 juta dan 10 juta garis di komputer saya:
Itu 1,5 detik untuk 1 juta baris, dan 19 detik untuk 10 juta baris.
sumber
%E
format waktu) kurang menarik untuk mengukur kinerja komputasi. Mode pengguna Waktu CPU (%U
atau hanyaTIMEFORMAT
variabel yang tidak disetel ) akan jauh lebih bermakna.%U
.