Różne sposoby korzystania z polecenia kolumny w Linux

Różne sposoby korzystania z polecenia kolumny w Linux

Czy kiedykolwiek byłeś w sytuacji, aby pracować z plikami CSV i wyprodukować wyjście w strukturalnym formacie tabelarycznym? Niedawno pracowałem z oczyszczaniem danych na pliku, który nie jest w odpowiedniej strukturze. Ma tak wiele białych oddziałów między każdą kolumną i muszę ją przekonwertować na format CSV, aby popchnąć do bazy danych. Po wyczyszczeniu i utworzeniu danych wyjściowych w formacie CSV, moje wyjście nie jest atrakcyjne wizualnie w celu weryfikacji integralności danych w pliku CSV. To jest czas, w którym przyda mi się, że polecenie „kolumny”.

Według Manpage, kolumna Komenda "Listy kolumnowe". Krótko mówiąc, kolumna to proste narzędzie, które może sformatować wyjście w kolumna Format (wiersze i pola) na podstawie struktury pliku źródłowego. kolumna Polecenie jest częścią pakietu Util-Linux.

Ważnym punktem, na który należy zwrócić uwagę kolumna Polecenie zachowuje się inaczej w dystrybucjach opartych na debian i REL. Powodem jest użycie Distro oparte na debian „kolumna" z Bsdmainutils Zamiast Util-Linux. Wersja powyżej kolumna polecenie jest nowsze niż Bsdmainutils pakiet. Spójrz na raport o błędach, aby dowiedzieć się więcej o tym.

$ dpkg -s $ (która kolumna) 
Która kolumna

Do celów demonstracyjnych używam Centos 7 i pokaże różne opcje między Ubuntu I Centos 7. Aby sprawdzić kolumna Wersja Uruchom następujące polecenie. To polecenie pokaże również Util-Linux Wersja pakietu.

$ kolumna --version # nie będzie działać w Debian/Ubuntu 

Możesz także sprawdzić wersję Util-Linux, uruchamiając poniższe polecenia.

$ rpm -qa | GREP -I UTIL -Linux # Redhat, Centos, Fedora, Amazon Linux $ dpkg -l | grep -i util -linux # ubuntu 

Przed użyciem kolumna Dowódzuj dobrym miejscem na rozpoczęcie, będzie strona Man i zbadać jej opcje.

Kolumna $ Man 

Wypisz zawartość pliku w formacie tabelarycznym

kolumna polecenie może utworzyć tabelę, przekazując nazwę pliku jako argument wraz z -T flaga. ja używam /etc/passwd Jako plik wejściowy.

$ kolumna -t /etc /passwd 
List Plik zawartość w formacie tabeli

Patrząc na powyższy obraz, możesz pomyśleć, że nie tego się spodziewaliśmy, a wyjście może wyglądać dziwnie. Tak! Masz rację. Kolumny rozważać przestrzeń jako domyślny ogranicznik Podczas tworzenia tabeli. To zachowanie można zastąpić, przekazując niestandardowy ogranicznik.

Niestandardowy delimetr

Niestandardowe ograniczenia dają szeroki zakres opcji do pracy. Aby utworzyć niestandardowe użycie ogranicznika -S flaga, a następnie ograniczenie. Teraz będziemy używać „:” jako ogranicznik do podziału /etc/passwd plik.

$ kolumn -s ":" -t /etc /passwd 
SYMITER

Spójrz na powyższy obraz, w którym tabela jest ładnie sformatowana i ustrukturyzowana. Z Util-Linux wersja 2.23 opcja -S został zmieniony, aby nie być zachłanymi.

Teraz uruchom to samo polecenie Ubuntu a wynik będzie chciwy. To dlatego, że kolumna Komenda (Bsdmainutils) NA Ubuntu będzie traktować wiele sąsiednich słów jako jedno słowo.

$ kolumn -s ":" -t /etc /passwd 
Chciwość wyjściowa

Aby przezwyciężyć to zachowanie -N flaga.

$ kolumna -t -s ":" -n/etc/passwd # tylko na debian/ubuntu 
Wyjście nieograniczone

Zignoruj ​​białe puste linie w wyjściu pliku

Gdy masz puste wiersze w pliku wejściowym, polecenie kolumny domyślnie to ignoruje. Zobacz mój plik wejściowy, który jest w formacie CSV i dodałem pustą linię między każdą linią. Teraz utwórzmy tabelę tak jak wcześniej z tym plikiem wejściowym.

$ kolumna -t -s ";" atrapa.tekst 
Ignoruj ​​puste, a linie

Z powyższego obrazu możesz zobaczyć mój plik wejściowy atrapa.tekst ma puste linie, a kiedy próbuję utworzyć stół, puste linie są ignorowane.

Notatka: To jest domyślne zachowanie zarówno dla „BSDMAINUTILS/UTIL-LINUX”Wariant kolumna Komenda. Ale kolumna (Bsdmainutils) ma opcję zastąpienia tego zachowania, przekazując -mi flaga.

$ kolumna -e -t -s ”,„ manekin.txt # tylko na Debian/Ubuntu 
Złóż białe linie

Z powyższego obrazu widać, że tabela jest sformatowana prawidłowo, a puste linie nie są ignorowane.

Separator wyjściowy pliku

Domyślnie dwie białe przestrzenie będą używane jako separatory wyjściowe. To zachowanie można zastąpić, przekazując -o flaga. Nie będziesz mieć dostępnej opcji separatora wyjściowego w kolumna (Bsdmainutils).

$ kolumna -t -s "," -o "||" atrapa.txt # tylko na dystrybucji opartej na RHEL 
Separator wyjściowy pliku

Konwertuj wiersze plików na kolumny

Używając -X flaga, którą możesz przekonwertować wiersze na kolumny. To zachowanie jest takie samo w obu Rhel I Ubuntu Warianty polecenia kolumny. Jest to bardzo przydatna funkcja, gdy musisz pobrać określone pole za pomocą polecenia AWK lub kolumny, a następnie przekonwertować je na nagłówek dla pliku CSV.

$ kolumna -x fullCols.tekst 
Konwertuj wiersze plików na kolumny

Kiedy prowadzisz kolumna polecenie bez użycia żadnych flag zachowanie będzie takie samo, jak przejście -X flaga.

Znajdź rozmiar kolumny

kolumna wykorzystuje zmienną środowiskową ($ Kolumny) Aby znaleźć rozmiar terminalu i na podstawie rozmiaru użyj polecenia echo, rozmiar tabeli zostanie wyświetlony w terminalu.

$ echo $ kolumny 

Spójrz na obraz poniżej. Początkowo rozmiar mojego terminalu, aby mieć $ Kolumny rozmiar ustawiony na 60 i przeprowadził polecenie kolumny. Znowu rozmiar mojego terminalu, aby mieć $ Kolumny rozmiar ustawiony na 114 i ponownie przeprowadził polecenie kolumny. Możesz zobaczyć różnicę w sposób, w jaki kolumna drukuje tabelę, gdy rozmiar terminalu.

$ kolumna -t -s ":" /etc /passwd | Głowa 5 
Zmień rozmiary kolumn

To wszystko dla tego artykułu. Jeśli masz jakieś opinie, podaj ją w sekcji komentarzy.