programmera.net -> linux -> normal     för utskrift      info@programmera.net

Transformation av textfiler

  Kommando    Exempel  Beskrivning
  sort  sort a.txt  Skriver ut a.txt med alla rader sorterade alfabetiskt.
  uniq  uniq a.txt  Skriver ut alla unika rader i a.txt.
  nl  nl a.txt  Skriver ut raderna i a.txt med radnummer.
  wc  wc -w a.txt  Räknar antalet ord (word count) i a.txt.
  fmt  fmt -w50 a.txt  Skriver ut a.txt formatterad så att varje rad blir 50 tecken lång.
  tr  tr 'a-z' 'A-Z' < a.txt  Skriver ut a.txt med alla små bokstäver utbytta mot stora.

På denna sida beskrivs kommandon som transformerar på textfiler. Ett gemensamt drag för dessa kommandon är att de inte förändrar den fil de använder sig av, de skriver bara ut något på skärmen. Om du vill spara t. ex. en sorterad fil använder du högerpilen (större än) för att få resultatet att hamna i en ny fil:
[olle@dev1]$ sort a.txt > b.txt
Kommandot ovan sparar den sorterade versonen av a.txt i b.txt.


sort

Flagga  Betydelse  Beskrivning
sort -i a.txt  ignore  Ignorerar alla bokstäver utanför ASCII-området.
sort -n a.txt  numerical  Sorterar numeriskt.
sort -r a.txt  reverse  Sorterar i bakvänd ordning.

Sort sorterar raderna i en fil i alfabetisk ordning. Ofta vill man istället sortera i numerisk ordning. För att demonstrera skapar jag en fil:
[olle@dev1]$ cat > x.txt
a
b
c
1
2
3
10
11
Om vi nu sorterar denna fil sker följande:
[olle@dev1]$ sort x.txt
1
10
11
2
3
a
b
c
Vi kan sortera i numerisk ordning med flaggan -n:
[olle@dev1]$ sort -n x.txt
a
b
c
1
2
3
10
11

uniq

Flagga  Betydelse  Beskrivning
uniq -c a.txt  count  Skriver ut alla unika rader med en siffra framför som indikerar antal förekomster av raden.
uniq -d a.txt  duplicated  Skriver bara ut de rader som förekommer mer är en gång.
uniq -i a.txt  ignore case  Tar inte hänsyn till stora och små bokstäver.

Kommandot är står för unique och skriver ut alla unika rader från en fil. Alla dubletter tas alltså bort. OBS! Fungerar bara när filen är sorterad.
[olle@dev1]$ uniq -c c.txt
	1 hej alla
	1 glada
	1 katter
Om vi nu lägger till en kopia av sista raden:
[olle@dev1]$ cat >> c.txt
katter
Ctrl+d
Nu kastar uniq bort den dubletta raden men visar med siffran 2 att det finns 2 st.:
[olle@dev1]$ uniq -c c.txt
	1 hej alla
	1 glada
	2 katter
Nu lägger vi till en ny rad:
[olle@dev1]$ cat >> c.txt
glada
Ctrl+d
Filen ser nu ut såhär:
[olle@dev1]$ cat c.txt
hej alla
glada
katter
katter
glada
Filen är alltså inte sorterad, därför kommer uniq att misslyckas med att kasta den andra förekomsten av glada.
[olle@dev1]$ uniq c.txt
hej alla
glada
katter
glada

nl

Flagga  Betydelse  Beskrivning
nl -i2 a.txt  increment  Ändra inkrementeringen till 2 (default 1).
nl -v2 a.txt     Ändra startnumret till 2(default 1).
nl -s"," a.txt     Ändra tecknet mellan siffran och raden till komma (default mellanslag).
nl -nrn a.txt  right  Flyttar siffran till höger (default).
nl -nln a.txt  left  Flyttar siffran till vänster.
nl -nrz a.txt  zero  Lägger till inledande nollor i siffran.

Detta kommando står för number lines och numrerar raderna i filen. Här ser du ett exempel:
[olle@dev1]$ nl c.txt
  1  hej alla
  2  glada
  3  katter

wc

Flagga  Betydelse  Beskrivning
wc -c a.txt  char  Räknar tecken i a.txt.
wc -l a.txt  line  Räknar rader i a.txt.
wc -w a.txt  word  Räknar ord i a.txt.

Kommandot betyder word count men räknar egentligen rader,ord och tecken.
[olle@dev1]$ wc c.txt
	3	4	22 c.txt
Om du bara vill se hur många ord filen innehåller:
[olle@dev1]$ wc -w c.txt
	4 c.txt
Om du vill undvika att filnamnet kommer upp i utskriften kan du använda pipe:
[olle@dev1]$ cat c.txt | wc -w
	4

fmt

Flagga  Betydelse  Beskrivning
fmt -w10 a.txt  width  Skriver ut a.txt med en bredd på 10 tecken.
fmt -s a.txt  split only  Delar långa rader men lägger inte ihop korta rader till längre.
fmt -u a.txt  uniform spacing  Ser till att det är endast ett mellanslag mellan orden och två mellan meningar.

Kommandot betyder format och används för att få paragraferna i en fil att skrivas med en viss radlängd. Defaultlängd är 75 tecken. Korta rader klistras ihop till långa så att raden blir 75 tecken lång. Rader som börjar med mellanslag klistras inte ihop, ty de tolkas som en andningspaus i texten. En tom rad markerar en ny paragraf och klisras inte ihop med raden ovan.
[olle@dev1]$ fmt c.txt
hej alla glada katter

tr

Flagga  Betydelse  Beskrivning
cat a.txt | tr -d '\n'  delete  Raderar alla radbrytningar.

Kommandot står för translate översätter tecken. tr är ett specialfall av sed, som klarar att substituera hela ord. Det speciella med tr är att man inte kan specifiera en fil på vanligt sätt utan måste använda pipe eller liknande:
[olle@dev1]$ cat c.txt | tr [:lower:] [:upper:]
HEJ ALLA
GLADA
KATTER