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.

Gabriel
źródło

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.

Gilles Quenot
źródło
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

Silverrocker
źródło
Co to "some data\nfoo bar"znaczy
Gabriel
Nie o to prosił OP;)
Gilles Quenot
@sputnick, naprawiłem to. przepraszam
Silverrocker,