Shellscript - läsa in info från text fil?

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1

Jag har ett shellscript som kan läsa in ett värde från prompten:
script.sh 12345

12345 använder den sedan för att köra ett kommando.

Nu skulle jag vilja att scriptet fungerar så här:
script.sh nummer.txt

Där nummerfilen ser ut så här:
12345
67890
12343
32344
23245

Och scriptet blir något sådant här då:
$1 = from file rad 1
$2 = from file rad 2
$3 = from file rad 3
$4 = from file rad 4
$5 = from file rad 5

kommando $1
kommando $2
kommando $3
kommando $4
kommando $2

Hur gör jag det?
Hoppas ni förstår vad jag vill göra.

enklast är att pipa filen till skriptet och läsa från stdin medelst read

while read allan ; do
 set $allan
 echo $1
 echo $2
done
  • Medlem
  • Kiruna
  • 2005-07-28 11:24

...eller ännu enklare är att använda xargs, som jag skrev som svar på din mycket liknande fråga i den här tråden:

xargs -n 1 kommando < källfil.txt

Där kommando är det kommando som ska utföras med argument hämtade från källfil.txt och -n 1 betyder att den ska hämta ett (1) argument i taget. (För andra kommandon som kräver fler argument kan man alltså justera detta.)

Se även man xargs.

Nu har jag äntligen kommit fram till detta läge...
Jag var ute lite tidigt med min fråga eller snarare att jag fick göra detta för hand som jag vill automatisera...
Så här vill jag alltså att det ska fungera:

xargs -n 1 spko -e < textfil.txt > | grep -i ^w | awk '{print $1}' > fil1.txt

Jag måste ge varje outputfil ett eget namn, jag vet vad de ska heta så dessa namn har jag placerat i en egen textfil, kan jag då namge outputen på följade sätt?

xargs -n 1 spko -e < textfil.txt > | grep -i ^w | awk '{print $1}' > < filnamn.txt >.txt

  • Medlem
  • Kiruna
  • 2005-08-01 11:48
Ursprungligen av Mattias Hedman:

Jag måste ge varje outputfil ett eget namn, jag vet vad de ska heta så dessa namn har jag placerat i en egen textfil, kan jag då namge outputen på följade sätt?

xargs -n 1 spko -e < textfil.txt > | grep -i ^w | awk '{print $1}' > < filnamn.txt >.txt

Nej, det där kommer tyvärr inte att fungera.

Jag hänger nog inte riktigt med på vad det är du vill göra. Hur ska de nya filnamnen relatera till output från det första kommandot? En fil per rad? Är det i så fall alltid samma antal? Är det beroende på nåt värde?

Berätta lite mer om vad det är du vill åstadkomma, vad dina kommandon gör och hur resultatfilerna ska användas så går det alltid att hitta ett någorlunda smidigt sätt att göra saker och ting.

/Niklas

1
Bevaka tråden