Nauč se Python > Kurzy > Linuxová administrace > Procesy & deskriptory souborů > Vypisování souborů

Vypisování souborů

Teď, když se umíš pohybovat po adresářovém systému a vytvářet soubory, se podíváme na to, co v těch souborech je.

Začni v adresáři data-shell/molecules:

$ cd ~/Dokumenty/data-shell/molecules
$ ls -F
cubane.pdb  ethane.pdb  methane.pdb  octane.pdb  pentane.pdb  propane.pdb

Vypisovací kočka

Podle přípony jsou tu soubory ve formátu Protein Data Bank, což je textový formát, kterým se dají popsat druhy a pozice atomů v molekule. Jak takový .pdb soubor vypadá? Zkus si nějaký vypsat pomocí příkazu cat:

$ cat methane.pdb
COMPND      METHANE
AUTHOR      DAVE WOODCOCK  95 12 18
ATOM      1  C           1       0.257  -0.363   0.000  1.00  0.00
ATOM      2  H           1       0.257   0.727   0.000  1.00  0.00
ATOM      3  H           1       0.771  -0.727   0.890  1.00  0.00
ATOM      4  H           1       0.771  -0.727  -0.890  1.00  0.00
ATOM      5  H           1      -0.771  -0.727   0.000  1.00  0.00
TER       6              1
END

Do terminálu se ti vypíše obsah souboru – to, co by se ti ukázalo v textovém editoru, kdybys soubor otevřela.

Proč cat?

Jméno cat je zkratka z angl. catenate/concatenate – zřetězit, spojit do sekvence. Je to termín pro spojování řetězců, jak to znáš z Pythonu: 'Ahoj' + ' ' + 'světe'. Když dáš příkazu cat několik argumentů, tak postupně vypíše obsah každého daného souboru. Spojí je dohromady, jeden za druhý:

$ cat methane.pdb ethane.pdb
COMPND      METHANE
AUTHOR      DAVE WOODCOCK  95 12 18
ATOM      1  C           1       0.257  -0.363   0.000  1.00  0.00
ATOM      2  H           1       0.257   0.727   0.000  1.00  0.00
ATOM      3  H           1       0.771  -0.727   0.890  1.00  0.00
ATOM      4  H           1       0.771  -0.727  -0.890  1.00  0.00
ATOM      5  H           1      -0.771  -0.727   0.000  1.00  0.00
TER       6              1
END
COMPND      ETHANE
AUTHOR      DAVE WOODCOCK  95 12 18
ATOM      1  C           1      -0.752   0.001  -0.141  1.00  0.00
ATOM      2  C           1       0.752  -0.001   0.141  1.00  0.00
ATOM      3  H           1      -1.158   0.991   0.070  1.00  0.00
ATOM      4  H           1      -1.240  -0.737   0.496  1.00  0.00
ATOM      5  H           1      -0.924  -0.249  -1.188  1.00  0.00
ATOM      6  H           1       1.158  -0.991  -0.070  1.00  0.00
ATOM      7  H           1       0.924   0.249   1.188  1.00  0.00
ATOM      8  H           1       1.240   0.737  -0.496  1.00  0.00
TER       9              1
END

V praxi se cat většinou používá pro vypsání jediného souboru, ale jméno stále odkazuje na tohle spojování. S kočkama samozřejmě nemá vůbec, ale vůbec nic společného 😺

Opakovací kočka

Když zadáš jen příkaz cat bez jména souboru, nestane se naoko nic. To proto, že cat v tomhle případě vypisuje vstup z klávesnice – a to po řádcích, takže dokud něco nenapíšeš a nestiskneš Enter, může to vypadat že „Bash zamrzl“.

A jakmile napíšeš řádek, cat ho zopakuje. To zatím není moc užitečné. Jako skoro každý program se cat dá ukončit pomocí Ctrl+C.

$ cat
ahoj
ahoj
blablabla
blablabla
^C

První opakování řádku má „na svědomí“ terminál, který automaticky ukazuje co napíšeš na klávesnici a nechá tě např. opravovat chyby pomocí Backspace. Příkazu předá až kompletní řádek, když stiskneš Enter. (Tohle chování se dá vypnout; programy jako nano se tak můžou starat o veškerý výstup samy.) Druhé opakování přichází od příkazu cat, který vypisuje co od terminálu obdrží, když zmáčkneš Enter.

Hlavičky a ocásky

Zkus si vypdat obsah souboru octane.pdb. Ten je trochu delší; máš-li menší terminál, možná se tam ani nevejde. V dnešních terminálech můžeš sice rolovat posuvníkem, ale hodí se umět vypsat jenom začátek – hlavičku – souboru. To se dělá příkazem head:

$ head octane.pdb
COMPND      OCTANE
AUTHOR      DAVE WOODCOCK  96 01 05
ATOM      1  C           1      -4.397   0.370  -0.255  1.00  0.00
ATOM      2  C           1      -3.113  -0.447  -0.421  1.00  0.00
ATOM      3  C           1      -1.896   0.386  -0.007  1.00  0.00
ATOM      4  C           1      -0.611  -0.426  -0.198  1.00  0.00
ATOM      5  C           1       0.608   0.405   0.216  1.00  0.00
ATOM      6  C           1       1.892  -0.400   0.001  1.00  0.00
ATOM      7  C           1       3.113   0.429   0.414  1.00  0.00
ATOM      8  C           1       4.397  -0.374   0.199  1.00  0.00

Normálně head vypíše prvních 10 řádků, ale pomocí přepínače -n můžeš zadat i jiný počet:

$ head -n4 octane.pdb
COMPND      OCTANE
AUTHOR      DAVE WOODCOCK  96 01 05
ATOM      1  C           1      -4.397   0.370  -0.255  1.00  0.00
ATOM      2  C           1      -3.113  -0.447  -0.421  1.00  0.00

Záporné hodnoty fungují jako v Pythonu: s -n -10 vypíše head všechny řádky kromě deseti posledních.

Podobný příkaz je tail, který naopak vypíše poslední řádky ze souboru:

$ tail -n 4 octane.pdb
ATOM     25  H           1       4.368  -1.282   0.801  1.00  0.00
ATOM     26  H           1       5.254   0.230   0.498  1.00  0.00
TER      27              1
END

Méně je více

Příkazy head a tail jsou užitečné, ale někdy se potřebuješ v dlouhém dokumentu trochu „porozhlédnout“. K tomu slouží příkaz less, který ukáže obsah souboru podobným způsobem jako man. Klávesami //PgUp/PgDb se v souboru „pohybuj“ a pomocí Q se dostaneš ven.

$ less octane.pdb

Proč „less“?

Příkaz less vychází ze staršího more (více), nástroje pro terminály které neuměly „rolovat“ v historii. Po vypsání kousku textu zobrazil něco jako Press Space for more, „stiskni mezerník pro více [textu]“ a čekal na stisk klávesy.

Jméno Less (méně) si jen hraje se rčením méně je více (less is more) – less je vylepšenou verzí more, která se např. umí v souboru vracet zpátky.

Počítání řádků

Občas nepotřebuješ přímo obsah souboru, ale chceš vědět kolik obsahu v něm je. Na to, abys to zjistila, slouží příkaz wc. Název je zkratka z anglického word count, počet slov; podobnost s evropskou zkratkou WC (water closet) je čistě náhodná.

$ wc octane.pdb
  30  246 1828 octane.pdb

Příkaz wc vypíše čtyři hodnoty: počet řádků, počet slov, počet bytů (tedy velikost souboru) a jméno souboru. Z nápovědy se dozvíš jak vybrat jen jednu z těchto hodnot (nebo víc jiných). Asi nejužitečnější je počet řádků, který vybereš přepínačem -l:

$ wc -l octane.pdb
30 octane.pdb

Když dáš příkazu wc víc souborů, vypíše informace o každém z nich:

$ wc *.pdb
  20  156 1158 cubane.pdb
  12   84  622 ethane.pdb
   9   57  422 methane.pdb
  30  246 1828 octane.pdb
  21  165 1226 pentane.pdb
  15  111  825 propane.pdb
 107  819 6081 celkem

V posledním řádku pak vidíš součet všech položek.

Když naopak příkazu wc nezadáš žádná jména souborů, funguje podobně jako cat: zpracuje vstup z klávesnice. To už se může hodit: když si zkopíruješ nějaký text z editoru do schránky, můžeš ji vložit „do“ spuštěného příkazu wc.

Dnešní editory mají funkci počítání slov zabudovanou. Je dokonce i v nano (pod Alt+D). Ale textová políčka třeba v prohlížeči bývají „hloupější“.

Tentokrát text neukončuj pomocí Ctrl+C – tím bys příkaz wc ukončila, takže by nedostal šanci vypsat výsledek. Místo toho použij Ctrl+D, což znamená „konec vstupu“.

$ wc
haló haló,
co se stalo?
      2       5      23

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.