GNU/Linux >> Belajar Linux >  >> Linux

mengekstraksi nilai unik antara 2 set/file

Menggunakan beberapa utilitas yang kurang dikenal:

sort file1 > file1.sorted
sort file2 > file2.sorted
comm -1 -3 file1.sorted file2.sorted

Ini akan menampilkan duplikat, jadi jika ada 1 3 di file1 , tapi 2 di file2 , ini masih akan menampilkan 1 3 . Jika ini bukan yang Anda inginkan, salurkan output dari sort melalui uniq sebelum menulisnya ke file:

sort file1 | uniq > file1.sorted
sort file2 | uniq > file2.sorted
comm -1 -3 file1.sorted file2.sorted

Ada banyak utilitas dalam paket GNU coreutils yang memungkinkan semua jenis manipulasi teks.


$ awk 'FNR==NR {a[$0]++; next} !($0 in a)' file1 file2
6
7

Penjelasan tentang cara kerja kode:

  • Jika kita sedang mengerjakan file1, lacak setiap baris teks yang kita lihat.
  • Jika kita sedang mengerjakan file2, dan belum melihat teks baris, maka cetaklah.

Penjelasan detail:

  • FNR adalah nomor catatan file saat ini
  • NR adalah jumlah rekor keseluruhan saat ini dari semua file masukan
  • FNR==NR benar hanya ketika kita membaca file1
  • $0 adalah baris teks saat ini
  • a[$0] adalah hash dengan kunci yang disetel ke baris teks saat ini
  • a[$0]++ trek yang telah kita lihat pada baris teks saat ini
  • !($0 in a) benar hanya jika kita belum melihat teks baris
  • Cetak baris teks jika pola di atas mengembalikan true, ini adalah perilaku awk default saat tidak ada tindakan eksplisit yang diberikan

Linux
  1. mengekstraksi teks dari file MS word dengan python

  2. Temukan file yang dibuat di antara rentang tanggal

  3. Mengekstrak file msi menggunakan Linux

  1. Ssh – Menyalin File yang Dilindungi Antar Server Dalam Satu Baris?

  2. Apa Itu Awk ‘{print $1+0.45 “ ” $2 “ ” $3 }’ File1> File2?

  3. Mengekstrak file SFX di Linux

  1. Produk Cartesian dari dua file (sebagai kumpulan baris) di GNU/Linux

  2. menemukan nilai unik dalam file data

  3. perbedaan antara file perangkat dan driver perangkat