GNU/Linux >> Belajar Linux >  >> Linux

Menghapus Redundansi Dari Kolom Keluaran?

Apa yang dimaksud dengan *NIX cara menghapus redundansi dalam kasus di mana saya memiliki perbandingan berpasangan seperti ini dalam dua kolom

    A B
    B A
    A C
    A D
    C A
    D A 
    B C
    C B

A B dan B A mewakili perbandingan yang sama dan saya ingin menghapus redundansi tersebut dari dataset. Hasil akhirnya seharusnya

A B
A C
A D
B C

Jawaban yang Diterima:

doit () 
{ 
    awk '{
           key=$1<=$2? $1 FS $2 : $2 FS $1; 
           if (!seen[key]) print $1,$2
           seen[key]=1
    }'
}
$ doit <test
A B
A C
A D
B C
$

(Atau, semakin seru karena jawaban Chris Down sangat manis)

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'

yang dapat dikurangi lebih lanjut jika Anda tidak peduli dengan ruang di data Anda

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'

)

FS adalah variabel "pemisah bidang" awk, yang digunakan di sini untuk menjamin batas antara bidang utama akan diidentifikasi dengan benar. Asli saya menjalankannya bersama-sama, $1$2 , yang seperti yang ditunjukkan Stephane Chazelas akan memperlakukan A BC dan AB C sebagai duplikat.


Linux
  1. Mengapa Ls -l Menghasilkan Ukuran Yang Berbeda Dari Ls -s?

  2. Pisahkan keluaran perintah dengan kolom menggunakan Bash?

  3. Bagaimana cara mendapatkan output dari gdb.execute di PythonGDB (GDB 7.1)?

  1. Menjalankan skrip Python dari PHP

  2. Bagaimana cara menyalurkan output dari grep ke cp?

  3. Baris perintah:Ekstrak substring dari output

  1. Jadikan Ls Bedakan Script Dari Biner Di Output?

  2. Mencegat Input Dan Output Dari Executable Tertentu?

  3. keluaran grep dari panjang ke lebar