Chciałbym użyć column
polecenia Unix do sformatowania tekstu. Mam pola rozdzielone tabulatorami, ale w każdym polu są również spacje. column
ograniczenia na białych spacjach (tabulatory i spacje). Jak sprawić, by kolumna używała wyłącznie tabulatorów jako separatora?
Próbowałem określić tabulator jako separator, używając:
cat myfile | column -t -s"\t"
column -t -s $'\t'
ponieważ bash wydawało się, że'\t'
oznacza zarówno jedno , jak\
i drugiet
, ale$'\t'
oznacza dosłowną zakładkę. Bash śmierdzi$'\t'
czyni tabulator separatorem. Ale jestem prawie pewien, że zrobię to,awk -F "\t"
aby użyć tabulatora jako ogranicznika dla awk. Dlaczego to działa, a nie tutaj dla kolumny?Użyłem następujących (działa tylko, jeśli twój tekst nie zawiera
|
):To po prostu zamienia karty na potoki, a następnie używa kolumny z potokami jako ograniczników.
(Zrobiłem to, ponieważ w odpowiedzi Stéphane'a nie widziałem niczego, co zadziałałoby w skorupce ryby. W przeciwnym razie odpowiedź Stéphane'a wydaje się dobra.)
źródło
Dla POSIX,
$'...'
znany jako ucieczka ANSI-C, nie jest zdefiniowany.Zamiast tego możesz użyć
$(printf '\t')
:$(printf '\011')
można użyć, ponieważ011
(ósemkowa reprezentacja dziesiętna 9) jest kodem ANSI dla znaku tabulacji w poziomie:Jednak zobacz komentarz Stéphane'a Chazelasa poniżej, dlaczego może to nie być spójne w różnych wersjach powłoki.
źródło
"$(printf '\t')"
jak pokazano w mojej odpowiedzi. Uwaga:$'...'
planowane jest włączenie do następnej głównej wersji specyfikacji POSIX.$(printf '\t')
POSIX? Dziękuję Ci!Służy
-t
do wyboru liczby kolumn, które chcesz. Pozostawienie tego pola pustego niczego nie zmienia. Ponadto chcesz po tym spacji,-s
więc wypróbuj to:cat myfile | column -s \t
źródło
column
wypełnia wiersze przed kolumnami. Możesz być zainteresowanypr