Jak ls -l
zmodyfikować dane wyjściowe w celu oddzielenia pól za pomocą tabulatorów zamiast spacji? Chcę wkleić dane wyjściowe do arkusza kalkulacyjnego; wypełnienie ze zmienną liczbą spacji utrudnia to. Ilustrować:
drwxr-xr-x 2 root root 4096 26 września 11:43 wpa_supplicant -rw-r ----- 1 root dialout 66 września 26 11:43 wvdial.conf drwxr-xr-x 9 root root 4096 8 października 08:21 X11 drwxr-xr-x 12 root root 4096 18 lutego 23:31 xdg drwxr-xr-x 2 root root 4096 31 stycznia 06:11 xml drwxr-xr-x 2 root root 4096 22 listopada 07:26 xul-ext -rw-r - r-- 1 root root 349 13 stycznia 2012 zsh_command_not_found
We fragmencie z ls -l /etc
powyższego wiersze 1, 2 i 3 mają jedną cyfrę w kolumnie 2, podczas gdy wiersz 4 ma dwie. Oznacza to, że wyrównanie uzyskuje się za pomocą dwóch spacji do oddzielenia kolumn 1 i 2 w rzędach 1-3, ale tylko jednej spacji w rzędzie 4.
ls
mówi , parsowanie jego wyników jest w porządku. To rzadko jest celem. Prawdopodobnie jest tutaj. Myślę, że zastosowana metoda jest całkiem dobra (każda metoda przyniesie niepożądane rezultaty, biorąc pod uwagę pewien zestaw potrzeb)! Jednak prawdopodobnie parsowaniels
może być lepsze. Rozważ przypadek nazwy pliku, która faktycznie zawiera znak tabulacji.ls -l
zastępuje kartę?
znakiem. Skrypt zachowuje znak tabulacji, który utworzy dodatkowe kolumny, jeśli jego wynik zostanie zinterpretowany jako rozdzielany tabulatorami i użyty do utworzenia arkusza kalkulacyjnego. Psunie się, jeśli nazwa pliku ma nowy wiersz.\n
lub\t
ich nazwy. Jeśli tak, to parsowanie danych wyjściowych zals
pomocą prostych poleceń bash będzie bardziej złożone, ale można to osiągnąć. Mogę zaktualizować odpowiedź, jeśli PO chce obsłużyć takie przypadki.\n
i\t
w ich nazwach.printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $file
i przekieruj ouptut plik jako./ls_tab.sh > listing.txt
.Próbować:
Lub, jeśli w nazwach plików znajdują się spacje:
źródło
awk
. Sprytny!$9
nie zmienia faktu, żeawk
zawsze interpretujesz spacje jako wskazujące na przerwę między kolumnami.$9
przechwytuje tylko pierwsze słowo w tej pozycji, a ponieważ pozostałe słowa są uważane za osobne kolumny o wyższym numerze, nigdy nie są drukowane.Nie musimy nawet konwertować danych wyjściowych na tabulator rozdzielany. Przestrzeń między kolumnami jest wystarczająca.
Uruchom
ls -l
polecenie w terminalu, tak jak zwykle, i skopiuj zawartość, którą chcesz wkleić w arkuszu kalkulacyjnym.Następnie otwórz program Arkusz kalkulacyjny (w moim przypadku LibreOffice Calc) i naciśnij Ctrl+, Vaby wkleić zawartość schowka.
Pojawi się Kreator importu tekstu. Upewnij się, że umieściłeś znacznik wyboru obok
Space
i naciśnij Ok. Możesz obejrzeć podgląd w dolnym okienku.źródło
Python nadaje się do tego:
źródło