web-dev-qa-db-fra.com

Remplacer toutes les valeurs dans une colonne à 1

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 définir toutes les valeurs de la troisième colonne sur 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  

Est-ce que quelqu'un connaît une commande qui peut résoudre ce problème?

8
user203269
awk '{print $1, $2, "1"}' inputfile
16
user1700494

essayer

maltraiter

 awk '{$3=1 ; print ;}' oldfile > newfile
  • $3 = 1 définira le troisième champ sur 1

sED (ici GNU ou Busybox sed avec son -i Option pour édition sur place)

sed -i 's/[0-9.]*$/1/' file
  • [0-9.]*$ est une séquence de 0 à 9 et . jusqu'à la fin de la ligne.

sED (4 octets de golf)

sed -i 's/[^ ]*$/1/' file
  • [^ ]*$ n'importe quel caractère autre que l'espace, jusqu'à la fin de la ligne.
12
Archemar

Les lignes de votre sortie attendue semblent terminer en deux caractères spatiaux et avoir des champs séparés par une seule onglet et un caractère d'espace.

Si c'est bien ce que vous voulez, alors vous auriez besoin de:

awk -v 'OFS=\t ' '$3="1  "' < infile > outfile

Ou avec sed:

tab=$(printf '\t')
sed "
  s/[[:blank:]]\{1,\}/$tab /g
  s/[^[:blank:]]\{1,\}[[:blank:]]*$/1  /
  s/^[[:blank:]]*//" < infile > outfile
5
Stéphane Chazelas

Simplement avec GNU sed, en utilisant -i Pour remplacer le texte directement dans le fichier:

sed -i 's:\(.*\s\)\(.*\s\)\(.*\):\1\21:g' textfile

Les colonnes sont assorties par des groupes de regex dans la parenthèse, les réutilisant avec \1 et \2, puis en utilisant un "1" pour remplacer le dernier groupe.

Dans ce cas d'utilisation, la solution proposée à l'aide de awk est également agréable et court.

3
mazs

cela fera le travail:

cat textfiles | cut -d' ' -f-2 | sed 's/$/ 1/'
2
Wissam Roujoulah