Wie ersetze ich den Inhalt einer bestimmten Spalte durch awk?

31

Gegeben: Ein Datensatz enthält 40 Spalten. Ich möchte die 35. Spalte ersetzen, sodass die 35. Spalte durch den Inhalt der 35. Spalte und ein "$" -Symbol ersetzt wird. Was mir in den Sinn kam, ist so etwas wie:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

Es funktioniert aber, weil es nicht machbar ist, wenn die Anzahl der Spalten so groß wie 10k ist. Ich brauche einen besseren Weg, um das zu tun.

Marcus Thornton
quelle

Antworten:

35

Das können Sie machen:

awk '$35=$35"$"'
cuonglm
quelle
8

Es gibt wahrscheinlich effizientere Möglichkeiten, dies zu tun. Mit dieser Einschränkung:

awk '{$35 = $35"$"; print}' infile > outfile
jasonwryan
quelle
3

Wenn das Feldtrennzeichen ist <space>:

sed 's/  */$&/35'
mikeserv
quelle
Wenn das sed 's/./$&/35'
Feldtrennzeichen nicht bekannt
@Underverse - Ich glaube nicht, dass das dasselbe ist. Das sollte dem 35. Zeichen in einer Eingabezeile mit $oder ohne Zeichen vorangestellt werden . Die obige Angabe sollte das 35. Vorkommen einer beliebigen Anzahl von Begrenzungszeichen - mit anderen Worten das 35. Feld - mit dem $Zeichen verbinden, unabhängig davon, wie Zeichen in jedem Feld stehen.
MikeServ
Ah, "40 Spalten in einem Datensatz". Ich habe "die 35. Spalte" als wörtlich "die 35. Zeichenspalte der Textdatei" gelesen.
6.
3

Um den originalen Field-Seprator zu reservieren, habe ich das gemacht. Die Spalte, die ich ausblenden wollte, war die Nummer $ 12.

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

Mit gawk -i, wenn Sie es haben, können Sie die Datei an Ort und Stelle bearbeiten.

zee
quelle
1

Bei Problemen mit den "genehmigten" Antworten würde dies mehr als nur die erste Spalte in der Datei ersetzen. Ich benutze diesen generischen Befehl:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

Woher:

  • [column] = Spalte, die Sie ändern möchten, beginnend mit 1 (nicht mit 0)
  • [replace] = Text, den Sie ersetzen möchten
Jason G
quelle
awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... tauschte in wenigen Sekunden eine Million Zeitstempel aus !! :)
Roblogic