Toon posts:

[Unix Shell scripting] file inhoud in for loop

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers,

Ik wil graag een (bash) scriptje hebben dat uit een plain text bestand alle regels onder elkaar zet met daarachter de grootte van deze regel in bytes. Daarvoor wilde ik een for loop gebruiken. Het volgende heb ik:
code:
1
2
3
4
for regel in 'words.dutch.small'
do
echo $regel
done


Dit script geeft 'words.dutch.small' in plaats van de inhoud. Ik heb al geprobeerd 'cat words.dutch.small' maar ook dat geeft gewoon de string 'cat words.dutch.small'. Ik heb het hele pad opgegeven, de relatieve pad, het maakt nix uit. Wie kan deze n00b helpen?

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
code:
1
2
3
4
for i in `cat words.dutch.small`
do
    echo $i
done

Zo kun je alle 'woorden' (velden omgeven door whitespace) in je file aflopen. Aan je filenaam te zien verwacht ik dat er maar 1 woord per regel is, en dan bereikt dit wat je wilt.

merk op dat ik om "cat ..." geen ' zet maar een `
een backtick dus, die zit op je tilde knop, naast de 1.

"He took a duck in the face at two hundred and fifty knots."


Verwijderd

Topicstarter
_O_ mijn dank is groot!

Verwijderd

Je kunt ook even kijken naar awk (mawk, gawk?).
Dat werkt normaal gesproken regel-voor-regel (tenzij je anders opgeeft).
$0 staat voor de huidige input (=regel), dus je kunt iets doen als:

awk '{print $0, length($0)}' < inputfile

Verwijderd

Topicstarter
Ik mag geen AWK gebruiken...

Maar ik heb nog een probleem, de bytes.

code:
1
2
3
4
5
for regel in `cat words.dutch.small`
do
bytes=`$file | wc -c`  
echo $regel $bytes 
done


Dat geeft dus $regel en dan 0. Ik heb al wat varianten geprobeerd:

code:
1
echo $file | wc -c

code:
1
echo $file | wc -c | echo

code:
1
echo $file | wc -c > bytes


die ook niet werkten...

[ Voor 5% gewijzigd door Verwijderd op 17-04-2003 13:47 ]


Verwijderd

Topicstarter
ah probleem opgelost:
code:
1
2
3
4
5
for regel in `cat words.dutch.small`
do
echo $regel
echo $regel | `echo wc -c`
done
Pagina: 1