Mam plik z dwiema kolumnami, jak pokazano poniżej (przykład):
PLIK 1:
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
Muszę sformatować to, a moim oczekiwanym wynikiem powinno być:
PLIK 1:
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
shell
columns
text-formatting
Baran
źródło
źródło
Michael Rod 3
są to 2 kolumny, a nie 3?Odpowiedzi:
Gdyby dane wejściowe obejmowały tylko dwie kolumny, sugerowałbym użycie
column -t
. To jednak nie działa tutaj, ponieważcolumn
narzędzie będzie traktować dowolną liczbę spacji lub tabulatorów jako ograniczniki kolumn:„Michael Rod” to dwie kolumny, więc jeden wiersz ma jedną kolumnę więcej niż inne wiersze, co zakłóca wynik.
Możemy obejść ten problem, wstawiając znak tabulacji przed ostatnią kolumną, a następnie pozwalając na
column
użycie (tylko) tego znaku jako separatora:W Awk
NF
jest liczbą pól (kolumn) i$NF
danymi w ostatnim polu. Skrypt, którego używam, po prostu modyfikuje dane ostatniego pola, przygotowując znak tabulacji przed wydrukowaniem pełnego wiersza.Jeśli twoja powłoka nie rozumie
$'\t'
, możesz wybrać inny znak, który nie jest częścią danych:źródło