Üdvözlet,
Van egy elég egyszerű problémám, de most nagyon nem áll rá az agyam a megoldásra. Van egy txt file, benne x mező rekordonként. Ki szeretném iratni az összes rekord összes mezőjét, kivéve az első mezőket. A mezők száma változik rekordonként. Elég érthetően fogalmaztam? A man awk-s válaszokat kérem most hanyagolni, mivel annyira nem triviális nekem a megoldás. Előre is köszönöm a segítséget.
- 1462 megtekintés
Hozzászólások
man awk:
... The variable NF is set to the total number of fields in the input record. ...
Zsiraf
p.s.: probalj valami for-t
- A hozzászóláshoz be kell jelentkezni
Az NF -et én is megtaláltam, és próbáltam "valai for-t", ami szépen ki is írja a mezőket 2-től kezdve. Ezzel csak annyi baj van, hogy a mezőket soronként írja ki és ez így nem jó.
- A hozzászóláshoz be kell jelentkezni
Akkor lehet, hogy a kiíratás rossz.
print helyett használj printf-et
- A hozzászóláshoz be kell jelentkezni
sed és substitute nem jó?
csinálsz két patternt:
1. az első mező
2. az összes többi
3. majd cseréled a sort az "összes többi" patternre
- A hozzászóláshoz be kell jelentkezni
Nem awk, de műx:
cut -d\ -f2-
- A hozzászóláshoz be kell jelentkezni
cut: the delimiter must be a single character
- A hozzászóláshoz be kell jelentkezni
Sorry, kihagytam egy space-t a -d\ után.
Köszi, ez így remek!
--
http://laszlo.co.hu/
- A hozzászóláshoz be kell jelentkezni
használhattad volna az idézőjelek közé tett szóközt és akkor nem kell a backslash.
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
de ha már awk
awk -F' ' '{$1="";print $0;}'
- A hozzászóláshoz be kell jelentkezni
|awk '{for(i=2; i<=NF; i++) printf("%s ",$i)}'
vagy hasonlo...
pl:
emrtber@selic082:~> echo "
ab cd ef g h
i jk l mno p
q
r stu v x y z " |awk '{for(i=2; i<=NF; i++) printf("%s ",$i); printf("\n")}'
cd ef g h
jk l mno p
stu v x y z
emrtber@selic082:~>
- A hozzászóláshoz be kell jelentkezni
Ennek a for ciklusos megoldásnak van egy mellékhatása: megváltoztatja a tokenek közötti szóközök számát. Tehát ha fontos az "íráskép" megőrzése, akkor az awk '{$1=""; print $0}' megoldás jobb.
- A hozzászóláshoz be kell jelentkezni
Hogy ez mennyire triviális volt így :). Köszönöm!
--
http://laszlo.co.hu/
- A hozzászóláshoz be kell jelentkezni