J'ai un fichier .txt avec des numéros ordonnés comme ceci (sur la même ligne):
106849_01373 106849_01967 106850_00082 23025.7_01059
Je voudrais les convertir comme ça:
106849_01373
106849_01967
106850_00082
23025.7_01059
Je n'ai aucune idée de la commande à utiliser. Quelqu'un peut-il m'aider avec ça?
command-line
text-processing
Annemieke Smet
la source
la source
Assez facile avec
tr
:Exemple:
la source
La réponse de heemayl est la voie à suivre, mais voici une alternative en utilisant Perl:
-l
: active le traitement automatique de fin de ligne. Il a deux effets distincts. Tout d'abord, il compile automatiquement $ / (le séparateur d'enregistrement d'entrée) lorsqu'il est utilisé avec -n ou -p. Deuxièmement, il affecte $ \ (le séparateur d'enregistrements de sortie) pour avoir la valeur d'octnum afin que toutes les instructions d'impression aient ce séparateur ajouté à nouveau. Si octnum est omis, définit $ \ à la valeur actuelle de $ /.-a
: active le mode de fractionnement automatique lorsqu'il est utilisé avec -n ou -p. Une commande de division implicite au tableau @F est effectuée comme première chose à l'intérieur de la boucle while implicite produite par -n ou -p.-n
: oblige Perl à assumer la boucle suivante autour de votre programme, ce qui le fait parcourir les arguments de nom de fichier un peu comme sed -n ou awk:-e
: peut être utilisé pour entrer une ligne de programme;$,="\n"
: définit le séparateur de champ de sortie sur une nouvelle ligne;print(@F)
: imprime les champs séparés par le séparateur de champs de sortie.la source
AWK
approche. Modification de base du séparateur de sortie pour les champs et bouclage. Le fichier de test est votre exemple collé encore et encore avec ENDLINE à la finla source
En utilisant
sed
:la source
Je viens d'ajouter une solution Python pour le plaisir:
Cette commande exécute le script Python 3 sur une ligne en guillemets simples avec le nom de fichier que vous souhaitez convertir en argument à la fin. La syntaxe est la suivante:
Le script à une ligne que nous utilisons est le suivant (étendu à plusieurs lignes pour plus de clarté):
Il importe le
sys
module pour lire les arguments de ligne de commande, prend le premier argument donné comme nom de fichier à ouvrir et imprime chaque bloc de données séparé par des espaces du fichier sur une seule ligne.la source