Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/02/2007, 14h14   #1
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
Par défaut Longueur d'un fichier sous UNIX

Bonjour à tous,

Au boulot nous faisons pas mal de transfert de fichier entre MVS et UNIX.
les fichiers MVS sont de longueur FIXE.
Prenons l'exemple d'un fichier d'une longueur de 250 (caractères)

- Avec quel commande UNIX puis je afficher sa longueur ?
j'ai essayé avec un head -1 fichier | wc -m mais ça ne m'affiche que
la longueur de la ligne choisi et pas la longueur du fichier

- Est il possible d'afficher les lignes d'un fichier sur toute leur longueur en passant par vi et telnet (pour éviter le retour à la ligne automatique) ?
il faut peut etre configurer HUMMINBIRD (mon terminal)

- Comment avec vi créer un fichier d'une longueur fixe ?

merci
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 14h40   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
deja je ne pene pas que tu evoque un fichier de longueur fixe, mais d'enregistrement (ligne) a longuer fixe .

la taille d'un fcher tu l'obtiens par la commande ls -s ou la commande stat
la longuer d'une ligne, tout depend du type de fichier :
si "binaire" (data), pas moyen de le savoir à la vu du fichier
si "ascii" (txt) tout depend du caractere de fn de ligne.

Sous MVS la structure d'un fichier est indiquée a l'OS lors de sa creation, sous *nix un fichier n'est jamais qu'une succession d'octet sans aucune signification pour l'OS.
C'est du domaine de l'applicaton que de gerer la structure.
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 15h07   #3
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
les fichiers sont de l'ASCII
je suis en KSH.... la commande stat n'existe pas et ls -s me ramène la taille du fichier, pas la longueur du fichier en octets.

mais je comprend mieux maintenant le pourquoi du comment.
ce qui délimite les lignes dans mon fichier c'est le retour chariot.
Pour trouver la longueur de mon fichier (qui vient de MVS) il faut donc
que je trouve la ligne la plus longue de mon fichier terminée par un retour chariot.. y a - t -il une commande simple pour ça ? ou faut il lire tout le fichier
ligne par ligne pour les comparer ?
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 17h56   #4
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
a priorie il te faut la determiner toi même, il serait plus simple de creer un fichier de description depuis Mvvs et de l'envoyer en meme temp que le fichier aSCII.
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 19h27   #5
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
merci de ta réponse rapide
bonne soirée
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h57   #6
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 450
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 450
Points : 7 559
Points : 7 559
Un petit script pour connaître la longueur de la plus grande ligne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#!/usr/bin/ksh
if [[ -f "$1" ]] 
then
 typeset tmpfile="$0."$(date '+%y%m%d%H%M%S')
 [[ -f "${tmpfile}" ]] && rm "${tmpfile}"
 while read
 do
  echo "${REPLY}" | wc -c >> "${tmpfile}"
 done < "$1"
 cat "${tmpfile}" | sort -un | tail -1
 rm "${tmpfile}"
fi
Le même en une seule ligne !
Code :
1
2
 
[[ -f "$1" ]] && while read ; do echo "${REPLY}" | wc -c ; done < "$1" | sort -un | tail -1
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 20h52   #7
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
super merci pour le script je gade au chaud
heu ça sert à quoi les double [[ ]] un simple [ ]
ne suffirait pas ?
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 09h53   #8
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 450
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 450
Points : 7 559
Points : 7 559
Citation:
Envoyé par DIE
super merci pour le script je gade au chaud
heu ça sert à quoi les double [[ ]] un simple [ ]
ne suffirait pas ?
Les doubles, c'est la syntaxe POSIX / ksh.
Les simples, c'est l'ancienne syntaxe sh / bsh reprise par bash...
Cela permet une certaine cohérence d'écriture avec les doubles (( )) des expressions calculées.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h06.


 
 
 
 
Partenaires

Hébergement Web