GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Hinzufügen einer Spalte mit Werten in einer tabulatorgetrennten Datei

Sie können eine Einzeiler-Schleife wie diese verwenden:

for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done

Für jede Datei in der Liste wird sed verwendet am Ende jeder Zeile einen Tabulator und den Dateinamen anzuhängen.

Erklärung:

  • Mit dem -i mit sed kennzeichnen um eine Ersetzung an Ort und Stelle durchzuführen und die Datei zu überschreiben
  • Führen Sie eine Ersetzung mit s/PATTERN/REPLACEMENT/ durch . In diesem Beispiel ist PATTERN $ , das Ende der Zeile, und REPLACEMENT ist \t (=ein TAB) und $f ist der Dateiname aus der Schleifenvariablen. Die s/// Der Befehl steht in doppelten Anführungszeichen, damit die Shell Variablen erweitern kann.

Komm schon, warum empfiehlt ihr diese leistungsstarken Tools, wenn es paste gibt Befehl!

$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A   1
B   2
C   3
D   4

Mit ein wenig Trickserei könnten Sie paste verwenden für den Zweck des OP. Es ersetzt jedoch nicht die vorhandenen Dateien:

for f in file1 file2 file3; do 
    paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done

Dadurch wird der jeweilige Dateiname als letzte Spalte jeder Datei in die neue Datei filename.new eingefügt


Sie können awk verwenden :

awk '{print $0, FILENAME}' file1 file2 file3 ...

Linux
  1. Befehlsausgabe oder Dateiinhalt im Spaltenformat anzeigen

  2. Umgebungsvariablen in einer Datei durch ihre tatsächlichen Werte ersetzen?

  3. Linux-Shell-Sortierdatei nach der zweiten Spalte?

  4. bash-Dateivervollständigung ohne Angabe von ./

  5. Formatieren Sie den Zeitstempel in einer durch Pipes getrennten Datei neu

Nehmen Sie die n-te Spalte in einer Textdatei

Warum fügt Vim einen Zeilenumbruch hinzu? Ist das eine Konvention?

Abrufen von Werten aus der Plist-Datei unter Linux

cp-L vs. cp-H

Verwenden von awk zum Summieren der Werte einer Spalte basierend auf den Werten einer anderen Spalte

Datei zu tbz-Dateien hinzufügen