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