Sök…


Extrahera specifika rader från en textfil

Anta att vi har en fil

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

Vi vill extrahera raderna 2 och 3 från den här filen

awk 'NR==2,NR==3' lorem_ipsum.txt

Detta kommer att skriva ut rad 2 och 3:

 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.

Extrahera specifik kolumn / fält från specifik rad

Om du har följande datafil

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

kanske du behöver läsa den fjärde kolumnen i den tredje raden, det här skulle vara "24"

awk 'NR==3 { print $4 }' data.csv

ger

24

Ändra rader under flyg (t.ex. för att fixa Windows-linjeavslut)

Om en fil kan innehålla Windows eller Unix-liknande linjeavslut (eller till och med en blandning av båda), kanske den avsedda textersättningen inte fungerar som förväntat.

Prov:

$ 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

Detta kan enkelt fixas med en ytterligare regel som infogas i början av awk-skriptet:

/\r$/ { $0 = substr($0, 1, length($0) - 1) }

Eftersom åtgärden inte slutar med next , tillämpas följande regler som tidigare.

Prov (med fix av linjeavslut):

$ 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow