Apa yang `uniq -t` lakukan?

15

Saya memiliki beberapa kode lama dari tahun 2003 yang menggunakan -topsi untuk uniqperintah. Itu melempar kesalahan karena opsi itu mungkin tidak didukung lagi.

Inilah bagian yang menggunakan perintah:

egrep -n "{ IA32_OP" ia32-decode.c | \
    awk '{ print $1 $3 $4 }' | \
    sort -t '(' +1 | \
    uniq -t ':' -f 1 | \
    sed 's/\(.*\)\:IA32_OP(\(.*\)),/#define IA32_OP_\2 \1/g' >> ia32_opcodes.h

Apa yang dilakukan opsi itu saat itu? Dengan apa saya bisa mengganti perintah itu?

Babken Vardanyan
sumber
Menurutnya man uniq, -f 1hindari membandingkan bidang pertama. Saya menyimpulkan dari -t ':'yang -tseharusnya mengubah pemisah bidang dari kosong ke :.
Martin von Wittich
Mungkin relevan: stackoverflow.com/questions/10546337/... Mungkin -tpilihan khusus Debian yang kemudian dihapus?
Martin von Wittich
1
Mungkin relevan: bugs.debian.org/cgi-bin/bugreport.cgi?bug=117016
Martin von Wittich
1
Saya selalu bertanya-tanya mengapa uniqtidak memiliki yang sama -tdan -ksebagai semacam atau mengapa semacam tidak memiliki semua fitur yang uniqdimasukkan (karena sekarang memiliki -u). Mereka -w/ -f/ -sdari GNU uniq tidak masuk akal. Mengapa mereka tidak bisa menggunakan sintaks yang sama dengan sort.
Stéphane Chazelas

Jawaban:

13

Satu-satunya referensi yang dapat saya temukan -tadalah dalam tambalan ini di milis GNU, yang berisi di antara petunjuk lainnya, ini:

+  -t, --separator=S     use a character in string S as field separator\n\

Ini tampaknya adalah ekstensi GNU tetapi tidak lagi digunakan. Tampaknya memungkinkan pemilihan karakter pembatas untuk bidang selain spasi atau tab. Coba ganti

uniq -t ':' -f 1 | \

dengan

sed 's/:/ /' | \
uniq -f 1 | \

yang akan diganti :dengan spasi yang uniq mengenali pemisah bidang.

casey
sumber
Saya akan menjatuhkan gdari sed, karena hanya bidang pertama yang dilewati. Setidaknya diperlukan satu titik dua agar baris terakhir berfungsi (semoga bukan yang pertama). Namun tetap tidak ada jaminan itu akan berhasil (salah satu bidang pertama mungkin berisi spasi putih)
Graeme
@Graeme Poin bagus, diedit.
Casey
Di Debian, coreutils 5.2.1 memang memiliki tambalan seperti itu, dan tampaknya tambalan itu dihapus pada 5.93-1, yaitu, pada November 2005.
user2719058
4

Diberikan manentri untuk -fopsi:

-f, --skip-fields = N

         avoid comparing the first N fields

Saya pikir cukup aman untuk mengasumsikan yang -tmenentukan pemisah bidang (ini juga terjadi sortpada baris di atas). Kombinasi dari dua opsi akan membuat uniqhanya beroperasi pada bagian dari garis mengikuti titik dua pertama.

Graeme
sumber