Na, ilyen egyszerű és kézenfekvő
paste -d',' <(cut -b40-49 log.txt) <(cut -b31-38 log.txt)
Szerk: sőt, ha nem akarok szeparátort, akkor ilyen egyszerű:
N=fileneve.txt; paste -d'§' <(cut -b1-34 $N) <(cut -b122-150 $N) | tr -d '§'
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
- 510 megtekintés
Hozzászólások
Nem, a cut nem rendezi át a sorrendet, sőt nem is duplikálja a kimeneten a bemenet tartalmát, tehát egy echo "123456789 | cut -b3-6,2-5" kimenete 23456 lesz, nem pedig 34562345. Egyébként nem te vagy az első (és vélhetőleg nem is az utolsó) , akivel ez az első körben nem igazán logikus működés szembe jött ;-)
- A hozzászóláshoz be kell jelentkezni
Elég elolvasni a cut specifikációját, hogy lássuk, nem, nem kell különböző eredményt adnia.
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html
The elements in list can be repeated, can overlap, and can be specified in any order, but the bytes, characters, or fields selected shall be written in the order of the input data.
A cut sermmi más, mint egy szűrő, ami eldönti a bemenet minden egyes byte-járól, karakteréről, vagy mezőjéről, hogy a kimenetre el kell-e küldeni, semmi mást nem csinál. Csak szűrsz a bemenetről, de nem rendezed át, nem csinálsz vele semmit. Csak eldöntöd, hogy kírjad-e vagy nem.
Pont emiatt lehet bármilyen sorrend, átfedés és ismétlődés a szűrési specifikációban, az csak azt definiálja, hogy mely bemeneti bájtot, karaktert, mezőt kell figyelembe venni, semmi mást.
- A hozzászóláshoz be kell jelentkezni
-
- A hozzászóláshoz be kell jelentkezni
Köszönet mindnyájatoknak! (bár a háromból az egyik hozzászólást kevésbé értettem, mint a másik kettőt;)
- A hozzászóláshoz be kell jelentkezni
Szerintem feliratozás volt :-)
- A hozzászóláshoz be kell jelentkezni
Így is lehet, talán így kicsit emészthetőbb, kézenfekvőbb:
printf "`cut -b40-49 log.txt`,`cut -b31-38 log.txt`"
- A hozzászóláshoz be kell jelentkezni
1) ha bármely cut kimenetében formátumvezérlő karakterek vannak, azokat a printf lenyeli, szóval hamár, akkor inkább
printf '%s' "`cut ....`"
2) de igazából mi a francnak a printf?
cut -b40-49 log.txt ; echo -n , ; cut -b31-38 log.txt
De az eredeti felvetés pont az, hogy módosít-e a bemenő sorrenden a cut a kimenetben. Nem.
- A hozzászóláshoz be kell jelentkezni
> De az eredeti felvetés pont az, hogy módosít-e a bemenő sorrenden a cut a kimenetben. Nem.
Én nem is mondtam, hogy módosít.
- A hozzászóláshoz be kell jelentkezni
Ha csereberélni kell a bemenet részeinek a sorrendjét, akkor mondjuk awk:
$ awk 'BEGIN {OFS="," } {print substr($0,40,10), substr($0, 31,8) }' log.txt
persze onnantól kezdve, hogy awk, a log.txt sorait egyszerűbben is lehet darabolni.
- A hozzászóláshoz be kell jelentkezni