2007-10-08, 20:02
  #1
Medlem
Jo jag har en lista som heter studenter


Den ser ut såhär

marma112:Martin:Malmström:800113-1234:TNCCC_1:TDDB46 TDDB80:
urbuv120:Urban:Uv:800121-1234:TNCCC_1:TDDB46 TDDB80:
berbe101:Bertil:Bertilsson:800102-1234:TNCCC_1:TDDB46 TDDB80:
olaol114:Ola:Olsson:800115-1234:TNCCC_1:TDDB46 TDDB80:
vilva121:Vilhelm:Valfridsson:800122-1234:TNCCC_1:TDDB46 TDDB80:
arlar128:Ärling:Ärta:800128-1234:TNCCC_1:TDDB46 TDDB80:
xerxi124:Xerxes:Xi:800124-1234:TNCCC_1:TDDB46 TDDB80:
ostov129:Öster:Överbliven:800129-1234:TNCCC_1:TDDB46 TDDB80:
cecca102:Cecilia:Carlsson:800103-1234:TNCCC_1:TDDB46 TDDB80:
perpe115:Per:Persson:800116-1234:TNCCC_1:TDDB46 TDDB80:
louli111:Louise:Linghed:760112-1234:TNDDD_3:TDDA01 TDDB81 TDDB80:
erier104:Erik:Eriksson:800105-1234:TNCCC_1:TDDB46 TDDB80:
sarsv118:Sara:Svensson:800119-1234:TNCCC_1:TDDB46 TDDB80:
frefr105:Fredrik:Fredriksson:800106-1234:TNCCC_1:TDDB46 TDDB80:
andan100:Anders:Andersson:800101-1234:TNCCC_1:TDDB46 TDDB80:
hanha107:Hans:Hansson:800108-1234:TNCCC_1:TDDB46 TDDB80:
yngyt125:Yngve:Ytter:800125-1234:TNCCC_1:TDDB46 TDDB80:
ivaiv108:Ivar:Ivarsson:780109-1234:TNCCC_3:TDDA89 TDDA94 TDDB17 TDDB46 TDDB80:
nicni113:Nicklas:Nilsson:800114-1234:TNCCC_1:TDDB46 TDDB80:
robra117:Robert:Ramfors:800118-1234:TNCCC_1:TDDB46 TDDB80:
johjo109:Johanna:Johansson:800110-1234:TNCCC_1:TDDB46 TDDB80:
turte119:Ture:Teknolog:800120-1234:TNCCC_1:TDDB46 TDDB80:
wilwo123:Willy:Wonka:800123-1234:TNYYY_5:TDDB80 TDDA34 TDDB17:
gusgu106:Gustav:Gustafson:800107-1234:TNCCC_1:TDDB46 TDDB80:
zamzn126:Zam:Znigel:800126-1234:TNCCC_1:TDDB46 TDDB80:
quiqv116:Quintus:Qvarnström:780117-1234:TNCCC_1:TDDB46 TDDB80:
akeak127:Åke:Åkerström:800127-1234:TNCCC_1:TDDB46 TDDB80:
karka110:Karl:Karlsson:800111-1234:TNCCC_1:TDDB46 TDDB80:
davda103avidavidsson:800104-1234:TNCCC_1:TDDB46 TDDB80:


Skriver jag tex cut -d : -f 2 studenter.txt får jag förnamanen i en snygg lista

martin
urban
bertil
osv...

men skriver jag ett script som ser ut såhär
#!/bin/sh

`cut -d : -f 2 $1`
Kommer namnen såhär
martin urban bertil osv......
VArför? och hur fixar jag så dom kommer

martin
urban
bertil
osv...
Citera
2007-10-08, 20:25
  #2
Medlem
junks avatar
\n eller något för newline?
Citera
2007-10-08, 20:26
  #3
Medlem
Ta bort accenttecknen.
Citera
2007-10-08, 20:49
  #4
Medlem
Ursäkta, det framgick nog inte i huvudinlägget att jag vill lägga själva listan i en variabel tex
#!/bin/sh
lol=`cut -d : -f 2 $1`
echo $lol
Och därför måste jag andvända ` sådana tecken
Citera
2007-10-08, 21:13
  #5
Medlem
for i in $lol; do
echo $i
done

eller liknande borde funka
Citera
2007-10-08, 21:18
  #6
Medlem
echo $lol | tr ' ' '\n'
Citera
2007-10-08, 21:41
  #7
Medlem
Varför går det inte att skriva såhär då
Får ett felmeddelande vid paste

#!/bin/sh
lol=`cut -d : -f 2 $1`
lol2=`cut -d : -f 3 $1`
lol3=`paste $lol | tr '' '\n' $lol2 | tr '' '\n'`
echo "$lol3"
Citera
2007-10-08, 22:59
  #8
Medlem
Ja, hörrödu. Det där ser barockt ut. För övrigt ska första argumentet till tr vara ett mellanslag inom enkla citattecken, inte bara två citattecken.

Om du nu vill skriva "Förnamn Efternamn", så föreslår jag
Kod:
awk -F: '{print $2, $3}' studenter.txt

I stället för att bara skriva "Får ett felmeddelande vid paste", så får du gärna vara mer specifik.
Citera
2007-10-09, 09:59
  #9
Medlem
Tack så hemskt mycket katalysator.
Det funka
Jag måste missuppfattat lite hur det funkar hmmm.
$1 $2 osv är kolumnerna i det här fallet?
Citera
2007-10-09, 12:51
  #10
Medlem
Ja, i awk så är (i allmänhet, det går att ändra) hela raden $0 och orden på raden, separerade av "whitespace", $1, $2 osv. Eftersom du har kolon som separator i din fil så talar du om det här med -F:. Kolla gärna på manualsidan för awk, det är inte så fasligt komplicerat men väldigt användbart.
Citera
2007-10-09, 20:56
  #11
Medlem
Citat:
Ursprungligen postat av nisse pisse
Jo jag har en lista som heter studenter


Den ser ut såhär

marma112:Martin:Malmström:800113-1234:TNCCC_1:TDDB46 TDDB80:
urbuv120:Urban:Uv:800121-1234:TNCCC_1:TDDB46 TDDB80:
berbe101:Bertil:Bertilsson:800102-1234:TNCCC_1:TDDB46 TDDB80:
...

Skriver jag tex cut -d : -f 2 studenter.txt får jag förnamanen i en snygg lista

martin
urban
bertil
osv...

men skriver jag ett script som ser ut såhär
#!/bin/sh

`cut -d : -f 2 $1`
Kommer namnen såhär
martin urban bertil osv......
VArför? och hur fixar jag så dom kommer

martin
urban
bertil
osv...

Urk, textbehandling i skalskript. Använd Perl vet jag:

Kod:
#!/usr/bin/perl -w

use strict;

my $filename = shift(@ARGV);
open(INPUTFILE, "<", $filename) or die "Could not open file '$filename': $!\n";

my @firstnames;
while (my $line = <INPUTFILE>) {     # Läs en rad i taget och placera i $line
   my @fields = split(/:/, $line);   # Splitta på kolon och placera alla fält i arrayen @fields
   push(@firstnames, $fields[1]);    # Lägg till förnamnet i arrayen @firstnames
}

foreach my $fname (@firstnames) {
    print "$fname\n";
}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in