J'ai plusieurs fichiers texte contenant 12 lignes et 3 colonnes.
Exemple:
2 6 0.74
42 6 0.58
80 6 0
112 6 0.24
132 6 1
216 6 0.7
342 6 0
390 6 0.21
432 6 0.56
466 6 0.75
524 6 0.6
646 6 0.9
Je veux mettre toutes les valeurs de la troisième colonne à 1 dans toutes les lignes.
La sortie devrait ressembler à ceci:
2 6 1
42 6 1
80 6 1
112 6 1
132 6 1
216 6 1
342 6 1
390 6 1
432 6 1
466 6 1
524 6 1
646 6 1
Quelqu'un connaît-il une commande qui peut résoudre ce problème?
awk '{print $1, $2, "1"}' inputfile > newfile
essayer
awk
$3 = 1
mettra le troisième champ à 1sed (ici GNU ou busybox
sed
avec son-i
option d'édition sur place)[0-9.]*$
est une séquence allant0
de9
et.
jusqu'à la fin de la ligne.sed (golfé 4 octets)
[^ ]*$
tout caractère autre que l'espace, jusqu'à la fin de la ligne.la source
sed 's/[^ ]*$/1/'
->awk
a joué au golf:awk \$3=1
(POSIX mais ne fonctionnerait pas avec le awk des années 70 tel que trouvé dans / bin sur Solaris)awk
solution est vraiment cool .... pouvez-vous expliquer plsLes lignes de votre sortie attendue semblent se terminer par deux espaces et les champs sont séparés par un onglet et un espace.
Si c'est bien ce que vous voulez, vous aurez besoin de:
Ou avec
sed
:la source
Simplement avec GNU
sed
, en utilisant-i
pour remplacer le texte directement dans le fichier:Les colonnes sont appariés par des groupes regex dans la parenthèse, de les réutiliser avec
\1
et\2
puis en utilisant un « 1 » pour remplacer le dernier groupe.Dans ce cas d'utilisation, la solution proposée
awk
est également agréable et courte.la source
cela fera le travail:
la source
la source