Awk sous windows (cygwin)

Awk sous windows (cygwin) - Shell/Batch - Programmation

Marsh Posté le 06-09-2007 à 17:09:38    

Bonjour,
 
pour les besoins d'un script je dois inserer des ":" dans une colone d'un fichier texte.
 
sous unix j'utilise la commande :
 

Code :
  1. awk '{print $1 " " $2 " " $3 " " $4 " " substr($5,1,2)":"substr($5,3,2) " " $6 " " substr($7,1,2)":"substr($7,3,2)}'


 
qui marche bien sous aix mais voila je dois le faire sur un serveur windows sur lequel cygwin est installé et je n'arrive pas à trouver a commande qui va bien... il a du mal avec les ":" dans le substr....
 
merci de votre aide

Reply

Marsh Posté le 06-09-2007 à 17:09:38   

Reply

Marsh Posté le 10-09-2007 à 14:21:48    

Bonjour,
 
j'ai contourner le problème mais la je bloque sur un autre souci,
A l'aide du awk j'ai formater un fichier de la manière suivante  :
 
xxxxx   xxxxxx   xxxxxx   xxxxxxx   156
xxxxx   xxxxxx   xxxxxx   xxxxxxx   -35
xxxxx   xxxxxx   xxxxxx   xxxxxxx   0
xxxxx   xxxxxx   xxxxxx   xxxxxxx   0
xxxxx   xxxxxx   xxxxxx   xxxxxxx   100
xxxxx   xxxxxx   xxxxxx   xxxxxxx   -25
xxxxx   xxxxxx   xxxxxx   xxxxxxx   12
   
 
Est je désire remplacer chaque valeur négative par cette meme valeur à laquelle on rajouterai 1440
Je debute en Dos et je vous remercie de votre aide.

Reply

Marsh Posté le 10-09-2007 à 15:54:10    

un coup de main svp

Reply

Marsh Posté le 10-09-2007 à 22:58:03    

Tu peux ajouter ce qui suit à ton code awk :

  if ($5 <0) $5 += 1440;


 
Jean-Pierre.

Reply

Marsh Posté le 11-09-2007 à 12:02:32    

bonjour,
 
peut tu préciser la commande (n'oublie pas que cest du DOS)
 
awk "{print $1,$2,$3,$4,$5,$6,if ($5 <0) $5 += 1440}" fic2.tmp
 
awk: cmd. line:1: {print $1,$2,$3,$4,$5,$6,if ($5 <0) $5 += 1440}
awk: cmd. line:1:                          ^ parse error
awk: cmd. line:1: {print $1,$2,$3,$4,$5,$6,if ($5 <0) $5 += 1440}
awk: cmd. line:1:                                        ^ parse error

Reply

Marsh Posté le 15-09-2007 à 15:03:13    

chameau59 a écrit :

bonjour,
 
peut tu préciser la commande (n'oublie pas que cest du DOS)
 
awk "{print $1,$2,$3,$4,$5,$6,if ($5 <0) $5 += 1440}" fic2.tmp
 
awk: cmd. line:1: {print $1,$2,$3,$4,$5,$6,if ($5 <0) $5 += 1440}
awk: cmd. line:1:                          ^ parse error
awk: cmd. line:1: {print $1,$2,$3,$4,$5,$6,if ($5 <0) $5 += 1440}
awk: cmd. line:1:                                        ^ parse error


Deux possibilités :
1) Tu modifie la champ avant de faire le print :

awk "{if ($5 <0) $5 += 1440;print $1,$2,$3,$4,$5,$6}" fic2.tmp


2) Tu effectue un test au niveau du print :

awk "{print $1,$2,$3,$4,($5<0 ? $5+1440 : $5),$6}" fic2.tmp


 
Jean-Pierre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed