Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Alex 25. 11. 2017, 18:17:17

Název: Bash: jak zobrazit druhý až poslední sloupec
Přispěvatel: Alex 25. 11. 2017, 18:17:17
Ahoj,

mám textový soubor ve kterém je výstup z SHA (hash a cesta k souboru) oddělený mezerou. Bohužel i názvy souboru mají mezeru, takže nemůžu přijít jak si zobrazit pouze cestu.

Nejlepší by bylo v awk definovat $1 do $NF - ale nikde jsem něco nenašel.

Jelikož hashe jsou stejně dlouhé, dalo by se nějak na 66 pozici vložit jiný oddělovač?

Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: mik 25. 11. 2017, 18:28:33
cut -d\  -f2-
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: rxgu 25. 11. 2017, 18:44:25
Co třeba takhle?

 sha256sum * | sed 's/.\{64\}//'
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: rxgu 25. 11. 2017, 18:45:20
Jinak když pošlete ten výstup, tak se na to klidně mrknu.
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: rxgu 25. 11. 2017, 18:47:18
Co třeba takhle?

 sha256sum * | sed 's/.\{64\}//'

Jo a tady jsem nevkládal oddělovač, ale odstranil ten první sloupec.
(V mém případě z sha256sum.)
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: Alex 25. 11. 2017, 19:07:54
Fungují obě varianty:
Kód: [Vybrat]
| cut -d\  -f2-
| sed 's/.\{64\}//'

Kvůli přehlednosti se mi víc líbí "cut", Nicméně se to musí ještě zpracovat. Prvním charakterem zůstává mezera. shasum generuje mezi hashem a názvem souboru dvě mezery. Všiml jsem si toho až teď.
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: rxgu 25. 11. 2017, 19:16:23
Fungují obě varianty:
Kód: [Vybrat]
| cut -d\  -f2-
| sed 's/.\{64\}//'

Kvůli přehlednosti se mi víc líbí "cut", Nicméně se to musí ještě zpracovat. Prvním charakterem zůstává mezera. shasum generuje mezi hashem a názvem souboru dvě mezery. Všiml jsem si toho až teď.

V tom případě bude lepší varianta:
sha256sum * | sed -r 's/.{66}//'

Tohle by mělo odstranit i ty mezery na začátku, případně bude stačit upravit číslo ve složené závorce. Jinak více informací o sed je třeba tady:
http://www.theunixschool.com/2014/08/sed-examples-remove-delete-chars-from-line-file.html
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: novotnyr 25. 11. 2017, 19:32:22
Ak máte súbor vstupne data.txt, tak

Kód: [Vybrat]
shasum "vstupne data.txt"
vypíše

Kód: [Vybrat]
f572d396fae9206628714fb2ce00f72e94f2258f  vstupne data.txt
POSIXový cut podporuje aj vypisovanie od konkrétneho poľa do konca:

Kód: [Vybrat]
shasum "vstupne data.txt" | cut -d' ' -f3-
Berieme dáta od tretieho poľa do konca. Druhé políčko je prázdne, lebo medzi hashom a názvom súboru sú dve medzery.

---

Alternatívne cez awk, tiež v POSIXe:

Kód: [Vybrat]
shasum "vstupne data.txt" | awk '{ print substr($0, 43) }'
Ak má hash 40 znakov a dva znaky sú na oddeľovacie medzery, zoberiem od 43 znaku z celého riadka ($0) do konca.
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: Alex 25. 11. 2017, 19:53:37
Alternatívne cez awk, tiež v POSIXe:

Kód: [Vybrat]
shasum "vstupne data.txt" | awk '{ print substr($0, 43) }'
Ak má hash 40 znakov a dva znaky sú na oddeľovacie medzery, zoberiem od 43 znaku z celého riadka ($0) do konca.


Řešení s awk pro mojí situaci funguje perfektně.

Jinak děkuju všem za odpovědi.
Název: Re:bash - jak zobrazit 2 až poslední sloupec
Přispěvatel: novotnyr 25. 11. 2017, 20:01:06
Jo, až teraz mi napadlo: POSIX cut vie sekať aj od konkrétneho znaku, nielen od delimitera, čo je ešte kratší zápis

Kód: [Vybrat]
shasum "vstupne data.txt" | cut -c43-
"Zober od štyridsiatehotretieho znaku do konca".
Název: Re:Bash: jak zobrazit druhý až poslední sloupec
Přispěvatel: standa12345 28. 11. 2017, 01:22:20
Další variace sedu - bez vazby na délku hashe:
cat filename | sed 's/^[^ ][^ ]* \(.*\)$/\1/'
Název: Re:Bash: jak zobrazit druhý až poslední sloupec
Přispěvatel: standa12345 28. 11. 2017, 01:24:58
Nebo variace bez referencování (inspirace z předchozích přízpěvků):
cat filename | sed 's/^[^ ][^ ]* //'