awk
Rij manipulatie
Zoeken…
Extract specifieke regels uit een tekstbestand
Stel dat we een bestand hebben
cat -n lorem_ipsum.txt
1 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
2 Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
3 It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
4 It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum
We willen regels 2 en 3 uit dit bestand halen
awk 'NR==2,NR==3' lorem_ipsum.txt
Hiermee worden de regels 2 en 3 afgedrukt:
2 Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
3 It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
Extraheer specifieke kolom / veld uit specifieke regel
Als u het volgende gegevensbestand hebt
cat data.csv
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
misschien moet je de vierde kolom van de derde regel lezen, dit zou "24" zijn
awk 'NR==3 { print $4 }' data.csv
geeft
24
Rijen direct wijzigen (bijvoorbeeld om Windows-regeleinden te corrigeren)
Als een bestand Windows- of Unix-achtige regeleinden bevat (of zelfs een combinatie van beide), werkt de beoogde tekstvervanging mogelijk niet zoals verwacht.
Monster:
$ echo -e 'Entry 1\nEntry 2.1\tEntry 2.2\r\nEntry 3\r\n\r\n' \
> | awk -F'\t' '$1 != "" { print $1 }' \
> | hexdump -c
0000000 E n t r y 1 \n E n t r y 2 .
0000010 1 \n E n t r y 3 \r \n \r \n
000001d
Dit kan eenvoudig worden opgelost door een extra regel die aan het begin van het awk-script wordt ingevoegd:
/\r$/ { $0 = substr($0, 1, length($0) - 1) }
Omdat de actie niet eindigt met de next , worden de volgende regels toegepast zoals eerder.
Voorbeeld (met fix van regeleinden):
$ echo -e 'Entry 1\nEntry 2.1\tEntry 2.2\r\nEntry 3\r\n\r\n' \
> | awk -F'\t' '/\r$/ { $0 = substr($0, 1, length($0) - 1) } $1 != "" { print $1 }' \
> | hexdump -c
0000000 E n t r y 1 \n E n t r y 2 .
0000010 1 \n E n t r y 3 \n
000001a
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow