Chcę sformatować plik tekstowy, aby uzyskać lepszy wygląd. Chcę więc dowolnego polecenia lub dowolnego skryptu powłoki, który sformatuje mój plik zgodnie z moimi oczekiwaniami. Plik wejściowy:
Index Name City
1. Ravi Bhuva Ahmedabad
2. Gaurav Bhuva Rajkot
3. Nimesh Godhasara Junagadh
4. Abhyuday Godhasara Nadiyad
.
.
100. abcd xyz
Plik wyjściowy:
Index Name City
1. Ravi Bhuva Ahmedabad
2. Gaurav Bhuva Rajkot
3. Nimesh Godhasara Junagadh
4. Abhyuday Godhasara Nadiyad
.
.
100. abcd xyz
linux
command-line
formatting
shell-script
textfiles
ravibhuva9955
źródło
źródło
Name
kolumna zawiera przestrzeń, należy ją oddzielić odCity
czegoś innego, w przeciwnym razie żadne narzędzie nie byłoby w stanie przetwarzać jej w niezawodny sposób.Odpowiedzi:
perl.
Założenie: miasto ma tylko jedno słowo.
wynik
źródło
Potrzebujesz czegoś, aby oddzielić nazwy od miast (prawdopodobnie miasta mogą zawierać więcej niż jedno słowo). Czy wszystkie imiona są dokładnie dwoma tokenami (pierwszy + ostatni)? Jeśli tak, możesz założyć cokolwiek po indeksie, a dwuczęściowa nazwa to nazwa miasta. Oto taki, który to robi:
cat new.txt | sed 's/^\(\S\+\)\s/\1~/' | sed 's/^\(\S\+\s\+\S\+\)\s\+\(.*\)$/\1~\2/' | column -s \~ -t
chociaż ostatnia etykieta u góry (miasto) musi zostać wyrównana ręcznie.
źródło
sed -r 's/\s+/~/; s/\s+(\S+)$/~\1/' new.txt | column -s \~ -t
- dzięki temu nagłówki są automatycznie wyrównane.W większości systemów Linux działa na nich Python. Uruchomienie tego skryptu Python zapewni wyniki, których szukasz:
Użyłem twoich oryginalnych pierwszych 4 wpisów powyżej i stworzyłem następujący plik wyjściowy:
źródło