2008-09-23 10 views
0

Je dois avoir un script pour lire les fichiers qui arrivent et vérifier les informations pour la vérification.Script Unix lisant une ligne et une position spécifiques

La première ligne des fichiers à lire est une date mais sous forme numérique. Ex: 20080923 Mais avant la date est d'autres informations, je dois le lire à partir de la position 27. Signification ligne 1 position 27, j'ai besoin d'obtenir ce nombre et de voir si elle est supérieure à un autre nombre. J'utilise la commande grep pour vérifier d'autres informations mais j'utilise des caractères spéciaux pour la recherche, dans ce cas l'information avant la date est toujours différente, donc je ne peux pas utiliser un caractère pour rechercher. Cela doit être fait par la ligne 1, position 27.

Merci.

Répondre

5
sed 1q $file | cut -c27-34 

La commande sed lit la première ligne du fichier et les cut côtelettes de commande sur les caractères 27-34 de l'une ligne, ce qui est l'endroit où vous avez dit la date est.

ajouté plus tard:

Pour le cas plus général - où vous avez besoin de lire la ligne 24, par exemple, au lieu de la première ligne, vous avez besoin d'une commande sed un peu plus complexe:

sed -n -e 24p -e 24q | cut -c27-34 
sed -n '24p;24q' | cut -c27-34 

L'option -n signifie 'ne pas imprimer les lignes par défaut'; le 24p signifie la ligne d'impression 24; le 24q signifie quitter après la ligne de traitement 24. Vous pouvez laisser cela, auquel cas sed continuerait à traiter l'entrée, en l'ignorant effectivement. Enfin, surtout si vous allez valider la date, vous pouvez utiliser Perl pour l'ensemble du travail (ou Python, ou Ruby, ou Tcl, ou n'importe quel langage de script de votre choix).

+0

J'aurais probablement dû ajouter - alternativement, utiliser Perl et faire la validation de la date dans le même script qui coupe les données. Python pourrait aussi être utilisé pour ça aussi. Vous pouvez également le faire en une seule commande sed: sed -n -e '1s/^. \ {26 \} \ (........ \). */\ 1/p' $ fichier Cependant, sed | couper est facile. –

1

Vous pouvez extraire les caractères commençant à la position 27 de la ligne 1 comme ceci:

datestring=`head -1 $file | cut -c27-` 

vous feriez effectuer votre prochaine étape de traitement sur DateString de $.

Questions connexes