Strumento Unix per l'output dei primi n caratteri in un file codificato UTF-8


1

Voglio stampare i primi 1000 caratteri in un file codificato UTF-8. So che lo strumento head può stampare i primi n byte di un file, ma può tagliare un carattere nel mezzo in modo da ottenere un risultato confuso alla fine.

Posso scrivere un programma awk per fare questo, ma posso sapere se esiste un modo più semplice?

PS. Ho trovato irragionevole che head e tail non supportino la codifica dei caratteri (la variabile di ambiente LANG), mentre altri strumenti come cut , wc , sed e awk supportano tutti la codifica dei caratteri.


Un'altra cosa a cui pensare - anche se si generano interi punti di codice, si potrebbe comunque finire per separare i caratteri di base dai loro successivi caratteri di combinazione. Se questo è un problema per la tua applicazione, dovrai fare qualcosa di un po 'più sofisticato della risposta finora.
Richard Kettlewell,

Risposte:


0

Non sono sicuro che sia più semplice, ma a modo mio:

cat file | iconv -t UTF-32 | head -c $[1000 *4+4] | iconv -f UTF-32

Questo si converte in un formato Unicode a larghezza fissa in modo che 1000 rappresenterà sempre caratteri interi.


iconv (quello incluso in glibc) ha un bug nel buffering dell'intero input prima di effettuare qualsiasi output. Questo ha un enorme impatto sulle prestazioni. Tuttavia, il tuo approccio funziona.
Wu Yongzheng
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.