[AWK] Variable naam in output filenaam

Pagina: 1
Acties:

  • UTMachine
  • Registratie: Juli 2000
  • Laatst online: 23:04
In mijn huidig AWK bestandje redirect ik output naar 2 bestanden :

print "%s" $1 > "output.1"
print "%s" $2 > "output.2"

Ik wil die "output.1" en "output.2" namen vanuit een shell scriptje doorgeven, ik heb al vanalles geprobeerd, maar het werkt niet ;( Iemand enig idee hoe ik dit wel werkend krijg??

  • Juup
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 16 juli 2002 10:56 schreef UTMachine het volgende:
In mijn huidig AWK bestandje redirect ik output naar 2 bestanden :

print "%s" $1 > "output.1"
print "%s" $2 > "output.2"

Ik wil die "output.1" en "output.2" namen vanuit een shell scriptje doorgeven, ik heb al vanalles geprobeerd, maar het werkt niet ;( Iemand enig idee hoe ik dit wel werkend krijg??
Iets van
code:
1
2
3
#!/bin/sh
VAR = "output.1"
print "%s" $1 > $VAR

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • phreggle
  • Registratie: Juni 2002
  • Niet online
Op dinsdag 16 juli 2002 11:31 schreef Jaaap het volgende:

[..]

Iets van
code:
1
2
3
#!/bin/sh
VAR = "output.1"
print "%s" $1 > $VAR
Let wel dat bij het toewijzen van een variabele er geen spaties rondom de = mogen staan, anders zal VAR opgevat worden als programma met de argumenten = en "output.1". :)
code:
1
2
3
bash-2.05a$ VAR = "bla"
bash: VAR: command not found
bash-2.05a$ VAR="bla"

Het is maar een detail, maar dit soort dingetjes komen altijd wel precies in sh/bash. :)

Edit: Als bonus nog meer info :)

Je kan binnen awk ook nog gebruik maken van de standaard variabele ARGC, ARGIND en ARGV. ARGC en ARGV werken op de standaard C/Perl/whatever manier. Dus:
code:
1
2
3
4
5
6
7
8
9
10
bash-2.05a$ cat test.awk
#!/usr/bin/awk -f
BEGIN {
  print ARGV[1]
  print ARGV[2]
}
bash-2.05a$ ./test.awk bestand1 bestand2
bestand1
bestand2
bash-2.05a$

Volgens mij moet het nu wel gaan lukken.
Succes ermee. :)

  • UTMachine
  • Registratie: Juli 2000
  • Laatst online: 23:04
Op dinsdag 16 juli 2002 11:31 schreef Jaaap het volgende:

[..]

Iets van
code:
1
2
3
#!/bin/sh
VAR = "output.1"
print "%s" $1 > $VAR
Klinkt leuk, maar als ik een $VAR ofzoiets in mijn .awk bestandje opneemt, dan komt er écht nix door qua waarde (jaja, heb ik meerdere malen geprobeerd!)

Verwijderd

Je geeft parameters in awk net zo door als in C:
code:
1
2
3
4
5
6
7
#!/usr/bin/awk -f

BEGIN {
      for (i= 1; i < ARGC; ++i) {
            print ARGV[i]
      }
}

./params.awk haha hihi

Output:
code:
1
2
haha
hihi

  • UTMachine
  • Registratie: Juli 2000
  • Laatst online: 23:04
Thanx! Het werkt nu ;)

  • windancer
  • Registratie: Maart 2000
  • Laatst online: 18-08 22:36
Wat je ook kunt doen is
code:
1
2
3
awk -v output1="output.1" output2="output.2" 
    '{print "%s" $1 > output1;
    print "%s" $2 > output2}'

op deze manier hoef je niet al je variabelen als argumenten mee te geven. Je kunt zo zelfs interne variabele "overrulen". Bijvoorbeeld
code:
1
2
awk -v RS="some_magic_number"  
    '<some program which uses some_magic_number as record seperator>'
Pagina: 1