Mam plik tekstowy:
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
Jak mogę go przetworzyć i uzyskać 2-kolumnowy plik, taki jak ten:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
Lub plik z trzema kolumnami, taki jak ten:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
Wolę dostać rozwiązanie awk, ale inne rozwiązania są mile widziane.
text-processing
awk
Tylko uczeń
źródło
źródło
$1
jako formatu ciąg doprintf
?"%s", ...
. Zaktualizowanoawk
mówiąc, to samo dotyczy polecenia w drugiej odpowiedzi na to pytanie.Umieść każde pole w wierszu i postkolumnowe.
Każde pole w jednej linii
tr
grep
sed
lub bardziej przenośny:
awk
lub
Kolumnowy
pasta
Dla 2 kolumn:
Dla 3 kolumn:
itp.
sed
Dla 2 kolumn:
Dla 3 kolumn:
itp.
xargs
Jako
xargs
zastosowania/bin/echo
do drukowania, pamiętaj, że dane, które wygląda jak opcjiecho
będą interpretowane jako takie.awk
pr
lub
kolumny (z pakietu autogenicznego)
Typowa wydajność:
źródło
xargs
linia nie powinna dzwonićecho
czyprintf
?xargs
połączenia/bin/echo
domyślniexargs
które wygląda jak opcje/bin/echo
powodujące problemy ... Dodałem ostrzeżenie.źródło
Jak wskazał Wildcard, będzie to działać tylko wtedy, gdy plik jest ładnie sformatowany, ponieważ nie ma żadnych znaków specjalnych, które powłoka będzie interpretować jako globs i jesteś zadowolony z domyślnych reguł podziału słów. Jeśli pojawi się pytanie, czy Twoje pliki „przejdą” ten test, nie używaj tego podejścia.
Jedną z możliwości byłoby użycie go
printf
do zrobienia tegoSpowoduje to podział wyrazów na treść
your_file
i sparuje je i wydrukuje z zakładkami pomiędzy nimi. Możesz użyć więcej%s
ciągów formatu w,printf
aby mieć dodatkowe kolumny.źródło
(zamień 4 na liczbę kolumn)
źródło
rs
Narzędzie BSD (zmiana kształtu):0 2
to wiersze i kolumny . Określenie0
oznacza „oblicz wiersze automatycznie na podstawie kolumn”.źródło
Podejście skryptowe w języku Python.
Podstawową ideą jest spłaszczenie wszystkich słów w tekście na jedną listę, a następnie wydrukowanie nowego wiersza po każdym drugim elemencie (to jest do kolumnowania w dwóch kolumnach). Jeśli chcesz 3 kolumny, zmień
index%2
naindex%3
Przykładowe dane wyjściowe:
Wersja trzykolumnowa (jak wspomniano powyżej, tylko
index%3 == 0
zmieniona)źródło