Ich habe mehrere Textdateien mit 12 Zeilen und 3 Spalten.
Beispiel:
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
Ich möchte alle Werte der dritten Spalte in allen Zeilen auf 1 setzen.
Die Ausgabe sollte folgendermaßen aussehen:
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
Kennt jemand einen Befehl, der dieses Problem lösen kann?
awk '{print $1, $2, "1"}' inputfile > newfile
Versuchen
awk
$3 = 1
setzt das dritte Feld auf 1sed (hier GNU oder Busybox
sed
mit der-i
Option zur direkten Bearbeitung)[0-9.]*$
ist eine Sequenz von0
zu9
und.
bis zum Ende der Zeile nach oben.sed (Golf 4 Bytes)
[^ ]*$
jedes andere Zeichen als Leerzeichen bis zum Ende der Zeile.quelle
sed 's/[^ ]*$/1/'
->awk
Golf gespielt:awk \$3=1
(POSIX, würde aber nicht mit dem Awk aus den 70ern funktionieren, wie in / bin auf Solaris zu finden)awk
Lösung ist wirklich cool .... können Sie erklären , plsDie Zeilen in Ihrer erwarteten Ausgabe scheinen mit zwei Leerzeichen zu enden und haben Felder, die durch eine Registerkarte und ein Leerzeichen getrennt sind.
Wenn Sie das wirklich wollen, dann brauchen Sie:
Oder mit
sed
:quelle
Einfach mit GNU
sed
,-i
um Text direkt in der Datei zu ersetzen:Die Spalten werden durch regex Gruppen in den Klammern angepasst, die Wiederverwendung von ihnen
\1
und\2
dann ein „1“ mit der letzten Gruppe zu ersetzen.In diesem Anwendungsfall ist die vorgeschlagene Lösung ebenfalls
awk
nett und kurz.quelle
das wird den Job machen:
quelle
quelle