Ich habe eine Datei mit 5 Millionen Zeilen:
xx ss ss "abcde"
Ich muss "abcde"
es nehmen und an den Anfang jeder Zeile kopieren:
"abcde" xx ss ss "abcde"
Die Zeichenfolge "abcde"
ändert sich in jeder Zeile, es handelt sich also nicht um ein bestimmtes Wort, sondern immer um das vierte Wort in jeder Zeile.
Antwort1
Ein alternatives awk:
awk '{print $4,$0}' file
Testen:
$ cat file7
abc def ghi nop
klm one two three
four five six nine
$ awk '{print $4,$0}' file7
nop abc def ghi nop
three klm one two three
nine four five six nine
Antwort2
Mit sed
, vorausgesetzt, die Spalten sind durch mehrere Leerzeichen getrennt und es könnten zusätzliche Spalten vorhanden sein:
sed 's/\([^ ]* *\)\{3\}\([^ ]*\)/\2 &/'
Das Muster entspricht drei wiederholten Spalten, die als Nicht-Leerzeichen, gefolgt von Leerzeichen, identifiziert sind, gefolgt von einer weiteren Spalte, die wie \2
in der Ersetzungszeichenfolge referenziert wird. Dadurch &
wird die gesamte Übereinstimmung in die Ersetzung eingefügt, sodass die vierte Spalte vor dem gesamten Rest der Zeile eingefügt wird.
Beachten Sie, dass dies mit mehr als vier Spalten funktioniert, jedoch fehlschlägt, wenn keine vierte Spalte vorhanden ist.
Dasselbe gilt, wenn erweiterte reguläre Ausdrücke verfügbar sind (FreeBSD oder GNU sed
):
sed -E 's/([^ ]* *){3}([^ ]*)/\2 &/'
Antwort3
Hier gibt es bessere Antworten, aber hier ist eine For-In-Schleife, die auch funktioniert:
IFS=$'\n'; for i in $(cat file); do var=$(echo $i | awk '{print $4}') ; sed -i "s/.*$var/$var &/g" file ;done
Antwort4
Wir platzieren das 4. Feld $F[3]
zusammen mit dem Listentrennzeichen $"
(standardmäßig space
) am Anfang des Datensatzes/der Zeile. Die -p
Option wird autoprint
den Datensatz.
perl -pale 's/^/$F[3]$"/' yourfile
Mit dem sed-Befehl speichern wir eine Kopie des Originals und zäunen das 4. Feld ein. Dann entfernen wir den führenden Teil. Und stellen das Original wieder her, indem wir es an den Musterraum anhängen, der jetzt das 4. Feld enthält.
sed -e '
/\n/!h
//!s/\S\+/\n&\n/4
/\n.*\n/D
s/\n.*//;G;s/\n/ /
' yourfile