Permalänk

Hjälp med bashscript

Hej hej

Hoppas att det finns någon bashkung därute som kan hjälpa mig med ett skript. Jag försöker få till ett skript som läser en txt-tabell med två kolumner och sen radvis använder informationen från de två kolumnerna till olika saker. Raderna (A-C nedan) föreställer 3 directories (en för varje studiedeltagare) som alla har eftertraktad information i olikt-kallade undermappar (deltagare As mapp heter 1, deltagare Bs mapp heter 2 etc.).

A 1
B 2
C 3

Jag vill att skriptet går igenom alla deltagare, kollar upp vad det står i kolumn två för varje deltagare och utför en command: input-output [mitt command] /dir/{första kolumnen}/{andra kolumnen} [input] {första kolumnen} [output]

Alltså:

input-output /dir/A/1 A
input-output /dir/B/2 B
input-output /dir/C/3 C

Tips någon?

Permalänk
Medlem

Det går rätt enkelt via en one-liner:

cat filnamn.txt | awk '{print "/dir/"$1"/"$2" "$1}' | xargs -0 input-output

Eventuellt kan detta behöva justeras för just ditt ändamål, men det förklarar principen. Hoppas detta hjälper dig vidare.

Visa signatur

-- Citera mig om ni vill få återkoppling --

Permalänk

awk verkar vara rätt väg att gå. Tack! Skulle helst vilja integrera detta i en for-loop, typ:

Citat:

for `cat files.txt` [något mer här antar jag...]; do input-output /.../$1/$2 $2; done

Får följande resultat med följande kod:

Citat:

for allfiles in `cat files.txt | awk '{print $1"/"$2}'`; do echo input-output $allfiles;done

Citat:

input-output A/1
input-output B/2
input-output C/3

Skulle alltså behöva att $1 dök upp igen som output på något sätt. Förslag?

Skrivet av dopedog:

Det går rätt enkelt via en one-liner:

cat filnamn.txt | awk '{print "/dir/"$1"/"$2" "$1}' | xargs -0 input-output

Eventuellt kan detta behöva justeras för just ditt ändamål, men det förklarar principen. Hoppas detta hjälper dig vidare.

Permalänk

Ingen snygg lösning, men detta tycks fungera!

Citat:

for allfiles in `cat files.txt | awk '{print $1"/"$2}'`; do echo input-output $allfiles/ ${allfiles//"/"*/};done

Tack för hjälpen!

Permalänk
Medlem

kommandot read är annars trevligt för detta, den kan arrayer vilket gör allt mycket trevligare att hantera.

while read -a ARR; do echo input-output /dir/${ARR[0]}/${ARR[1]} ${ARR[0]} done < files.txt

Visa signatur

The difference between stupidity and genius - the latter has limits