Wyrównaj kolumny w pliku ASCII


12

Mam plik tekstowy, który wygląda jak jego:

#c1     c2              c3              c4              c5              c6      c7      c8      c9      c10     c11     c12     c13
4599    995,274 2523,658        264,1417170     -33,6000        -0,3600 0,0202  0,0069  0,0227  10,1041 0,0169  0,2817  0,0239
6173    1552,290        1595,696        264,0603912     -33,4880        0,4374  0,0287  1,8123  0,0385  10,1289 0,0292  2,8445  0,0366
6456    1658,630        1529,292        264,0449377     -33,4800        0,0109  0,0234  1,0955  0,0296  10,5032 0,0223  1,7168  0,0293
8932    2750,029        1374,395        263,8866195     -33,4615        -0,3185 0,0249  0,9196  0,0302  10,5858 0,0221  1,3886  0,0296
4095    820,716 495,315 264,1658451     -33,3546        -0,4388 0,0216  0,6497  0,0252  10,6026 0,0188  1,1796  0,0258
4737    1045,289        1395,983        264,1338240     -33,4636        0,5900  0,0231  0,8853  0,0273  10,6501 0,0204  1,1661  0,0270

tj .: nie jest wyrównany do niektórych losowych linii (plik ma długość ~ 10000 linii) Potrzebuję go, aby wyglądał tak:

#c1     c2              c3              c4              c5              c6      c7      c8      c9      c10     c11     c12     c13
4599    995,274         2523,658        264,1417170     -33,6000        -0,3600 0,0202  0,0069  0,0227  10,1041 0,0169  0,2817  0,0239
6173    1552,290        1595,696        264,0603912     -33,4880        0,4374  0,0287  1,8123  0,0385  10,1289 0,0292  2,8445  0,0366
6456    1658,630        1529,292        264,0449377     -33,4800        0,0109  0,0234  1,0955  0,0296  10,5032 0,0223  1,7168  0,0293
8932    2750,029        1374,395        263,8866195     -33,4615        -0,3185 0,0249  0,9196  0,0302  10,5858 0,0221  1,3886  0,0296
4095    820,716         495,315         264,1658451     -33,3546        -0,4388 0,0216  0,6497  0,0252  10,6026 0,0188  1,1796  0,0258
4737    1045,289        1395,983        264,1338240     -33,4636        0,5900  0,0231  0,8853  0,0273  10,6501 0,0204  1,1661  0,0270

Zasadniczo szukam narzędzia skryptu / wiersza poleceń, aby automatycznie wyrównać kolumny pliku.

Odpowiedzi:


12

Spróbuj to zrobić w :

Aby przetestować STDOUT:

column -t file.txt

Aby zmodyfikować plik:

column -t file.txt > new_file.txt && mv new_file.txt file.txt

Jak widać, to wszystko, czego potrzebujesz. Oszczędza ci to dużo czasu, grając skomplikowanymi printfsztuczkami.


To polecenie nic nie zrobiło, po prostu wyświetliło plik w terminalu i zakończyło się. Czego tu brakuje?
Gabriel

Z jakiego systemu operacyjnego korzystasz? (umieść to w swoim oryginalnym POST)
Gilles Quenot

Używam Ubuntu 12.10.
Gabriel

Po prostu spróbowałem jeszcze raz, nic. Czy to polecenie powinno modyfikować oryginalny plik czy tworzyć nowy, wyrównany plik?
Gabriel

Zobacz moją edycję, aby edytować plik w miejscu (moja poprzednia wersja była tylko do wyświetlenia w terminalu)
Gilles Quenot

3

Szukasz trafnie nazwanego narzędzia kolumny.

Do tego, co chcesz, musisz przenieść dane do kolumny w ten sposób

cat yourfile | column -s " " -t

Zdefiniuj separator za pomocą opcji -s

-s " "

Powiedz colume, aby zrobił tabelę z -t


Co to "some data\nfoo bar"znaczy
Gabriel

Nie o to prosił OP;)
Gilles Quenot

@sputnick, naprawiłem to. przepraszam
Silverrocker,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.