2016-06-29 4 views
0

Ich habe mehr als 100 Tab-getrennte Dateien mit gleichen Spaltennamen. Ich möchte einen der Spaltennamen (Spalte 2) von "OLD" zu "NEW" in allen Dateien im Stapel ändern. Der Rest des Inhalts bleibt in den Dateien gleich.
Kann mir jemand helfen, wie man es mit awk macht?ersetzen Spaltenüberschrift für mehrere Tabulator getrennte Dateien

z. datei.txt

INFO OLD CONF  DB  COSMIC 
NA  NA  9  .  53 
NA  NA  10  .  192 
NA  NA  8  .  41 
NA  NA  8  .  87 
NA  NA  8  .  94 
NA  NA  8  .  92 
NA  NA  10  .  192 
NA  NA  10  .  47 
NA  NA  10  .  87 

möchte ich ändern, alten ' 'NEW':

INFO NEW CONF  DB  COSMIC 
    NA  NA  9  .  53 
    NA  NA  10  .  192 
    NA  NA  8  .  41 
    NA  NA  8  .  87 
    NA  NA  8  .  94 
    NA  NA  8  .  92 
    NA  NA  10  .  192 
    NA  NA  10  .  47 
    NA  NA  10  .  87 

ich das folgende Skript hier versucht haben

#!/bin/bash 
for file in 'ls PATH'; 
do 
    awk 'NR==1 && $2=="OLD"{$2=="NEW"}1' $file > temp && mv temp $file 
done 
+0

Ein Beispiel wird helfen, sein kann, um mehr Antworten zu bekommen. – karakfa

+0

Was ist das Trennzeichen? Irgendwelche Leerstellen, nur Tabs? – karakfa

+0

Es ist eine tabulatorgetrennte Datei, die drei Spalten enthält: "name" "new" "value". Ich kann die Beispieldaten hier nicht tabellarisch darstellen. Könnten Sie vorschlagen, wie das geht? – panbar

Antwort

0

ist ein Weg, dies zu tun in sed

$ sed -i'.bak' -r '1s/([^\t]*\t)OLD/\1NEW/' file 

i Wenn Sie die Dateien ändern möchten, ist sed eine bessere Alternative. Sie können alle in einer Schleife tun

$ for f in files; do sed -i'.bak' -r ... $f; done 

awk alternative

$ awk -v OFS='\t' 'NR==1 && $2=="OLD"{$2="NEW"}1' file > temp && mv temp file 
+0

sein mv: fehlende Zieldatei Operand nach 'temp ' – panbar

+0

sollte dort keine Umleitung sein, behoben. – karakfa

+0

Ich habe jetzt eine Beispiel-Testdatei und eine beabsichtigte Datei mit einem Code hinzugefügt. Ich habe den Hauptbeitrag oben bearbeitet. Kannst du es dir ansehen? – panbar

Verwandte Themen