Mam trochę starego kodu z 2003 roku, który używa -t
opcji uniq
polecenia. Zgłasza błąd, ponieważ ta opcja prawdopodobnie nie jest już obsługiwana.
Oto element, który używa polecenia:
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
Co wtedy zrobiła ta opcja? Czym mogę zastąpić to polecenie?
man uniq
,-f 1
unika porównywania pierwszego pola. Wnioskuję z-t ':'
tego, że-t
ma on zmienić separator pola z pustych pól na:
.-t
opcja specyficzna dla Debiana została później usunięta?uniq
nie ma tego samego-t
i-k
jako sortowania lub dlaczego sort nie ma wszystkichuniq
wbudowanych funkcji (ponieważ teraz ma-u
). Te-w
/-f
/-s
z GNU uniq nie mają sensu. Dlaczego nie mogli użyć tej samej składni cosort
.Odpowiedzi:
Jedyne odniesienie, które mogłem znaleźć,
-t
znajduje się w tej łatce na liście mailingowej GNU, która zawiera między innymi następujące wskazówki:To najwyraźniej było rozszerzenie GNU, ale już nie jest używane. Wydaje się, że pozwala wybrać znak oddzielający dla pól innych niż spacje lub tabulatory. Spróbuj wymienić
z
które zostaną zastąpione
:
spacjami, które uniq rozpoznaje separator pól.źródło
g
zsed
, ponieważ tylko pierwsze pole jest pomijane. Do działania ostatniego wiersza potrzebny jest co najmniej jeden dwukropek (mam nadzieję, że nie pierwszy). Nadal nie ma gwarancji, że zadziała (każde z pierwszych pól może zawierać spacje)Biorąc pod uwagę
man
wpis dla-f
opcji:Myślę, że dość bezpiecznie jest założyć, że
-t
określa on separator pól (tak też jestsort
w powyższym wierszu). Kombinacja dwóch opcji sprawiłaby, żeuniq
działałaby tylko na części linii następującej po pierwszym dwukropku.źródło