J'essaie de convertir un grand nombre de fichiers d'une mise en page en texte brut au format CSV. Les premières lignes de l'un des fichiers ressemble à ceci:sed: Ajouter une ligne à chaque ligne avec l'espace de stockage
SLICE AT X= -0.25
ELEM NO XI-COORD INWARD-NORMAL
1 0 0.000 0.000 0.000 0.000 0.000 0.000
2 0 0.000 0.000 0.000 0.000 0.000 0.000
3 0 0.000 0.000 0.000 0.000 0.000 0.000
Le nombre donné dans la première ligne (-0,25) doit être inséré en tant que paramètre dans chacune des lignes de données. Puisque ce nombre varie dans chacun des centaines de fichiers, je ne peux pas le fournir comme un littéral.
J'ai écrit le programme sed suivant:
# Reduce line 1 to just a number.
s/SLICE AT X= //
# Store line 1 in hold space.
1h
# Clear the other header line.
2d
# Insert X coordinate from hold space.
/^\ \{1,\}/G
# Separate values with commas.
s/\ \{1,\}/,/g
Il obtient aussi loin que la production de ce:
-0.25
,1,0,0.000,0.000,0.000,0.000,0.000,0.000
-0.25
,2,0,0.000,0.000,0.000,0.000,0.000,0.000
-0.25
,3,0,0.000,0.000,0.000,0.000,0.000,0.000
-0.25
,4,0,0.000,0.000,0.000,0.000,0.000,0.000
-0.25
Notez que la première ligne de la sortie est la première ligne d'origine.
Quelqu'un pourrait-il m'aider à obtenir le nombre collé dans le début de chaque ligne?
Merci à l'avance,
Ross
Merci, Cela fait un excellent travail avec l'extrait fourni, mais se heurte à des problèmes avec plusieurs fichiers en entrée . Bien que chacun des fichiers utilise la même mise en page, la deuxième ligne s'insinue dans la sortie. Je me demande si cela pourrait être dû à la position de la ligne absolue? –
$. n'est pas remis à zéro sur un nouveau fichier lors de l'utilisation de <>. voir eof dans la documentation de perlfunc –
Merci. J'ai juste fini d'encapsuler l'appel perl dans un petit script shell, qui a fait l'affaire. Merci pour la pensée latérale. –