Comment lire une ligne spécifique et une position spécifique?

J’ai du mal à lire une chaîne dans une ligne spécifique et une position spécifique. J’ai un fichier d’entrée qui a une position fixe et une longueur fixe pour chaque valeur dans chaque ligne. Voici un exemple de mon fichier d’entrée:

sltele Hoodie 24051988 d12Hdq sltele Hoodie 07051987 d30Hdq sltele Hoodie 07082011 d08Hdq sltele Hoodie 09081961 d04Hdq sltele Hoodie 20041962 d14Hdq sltele Hoodie 20032000 d01Hdq sltele Hoodie 13062002 d05Hdq 

Je dois lire une chaîne dans la 3ème colonne en première ligne. Donc, j’ai utilisé cette

 awk 'NR==1 {print $2, $3}' inputfile.inp 

Comment puis-je obtenir un résultat exact avec la position du caractère comme paramètre? (12-18 et 21-28)

utiliser cut -c

Consultez la page de manuel pour plus de détails.

vous pouvez également utiliser les éléments suivants:

 echo "abcdefghij" | awk '{print substr($0,2,2),substr($0,6,2)}' bc fg 

ci-dessus est 2 caractères de la deuxième position et 2 caractères de la 6ème position.

votre solution sera:

 awk 'NR==1 {print substr($0,12,6),substr($0,21,7)}' inputfile.inp 

la commande ci-dessus obtiendra les 6 caractères de la 12ème position et 7 caractères de la 21ème position de la ligne 1.

Vous pouvez aussi utiliser sed :

 sed -rn "1 s@.{11}(.{7}).{2}(.{8})@\1\2@p" filename 

Explication:

  • -n n’imprime pas les lignes
  • s remplacer
  • 1 seulement la première ligne
  • . {11} omet 11 caractères
  • (. {7}) enregistre 7 caractères (caractères 12-18)
  • . {2} omet 2 caractères (19-20)
  • (. {8}) enregistrer 8 caractères (21-28)
  • \ 1 \ 2 remplace la chaîne par les premier et deuxième enregistrements
  • p imprimer la ligne spécifiée ligne