2016-04-04 5 views
-1

Ich habe ein Dataset in einer Textdatei (Dataframe.txt), der Kopf der Datei ist der Name der Variablen in Zahlen. Die Bedeutung der Zahlen (der tatsächliche Name der Variablen) wird in einer anderen Datei (variables.txt) gespeichert. Zum Beispiel (der Einfachheit halber bearbeitet.Bash: ändern Kopfzeile der Datei nach Zeile in einer anderen Datei

> head dataframe.txt 
123 456 789 
1 2 3 
4 5 6 
7 8 9 

> variables.txt 
123 A 
456 B 
789 C 

Ich möchte den Header der dataframe.txt den Namen ändern, die in der variables.txt-Datei gespeichert werden, um die Verbindung zwischen Zahlen und Namen muss gleich bleiben . die gewünschte Ausgabe sei:

> head dataframe.txt 
A B C 
1 2 3 
4 5 6 
7 8 9 

gibt es eine Möglichkeit, den Header zu ändern nach einer anderen Datei, die die Zahlen mit dem Namen verbindet kann ich mir vorstellen, dass ein paar Zeilen awk könnten den Trick tun ..

Vielen Dank!

Hier

Antwort

1
$ awk 'NR==FNR{a[$1]=$2;next} FNR==1{for (i=1;i<=NF;i++) $i=a[$i]} 1' variables.txt dataframe.txt | column -t 
A B C 
1 2 3 
4 5 6 
7 8 9 
1

ist ein einfacher Bash-Skript für Ihr Szenario:

Dateiname: script.bash

#!/bin/bash 
while read -r line || [[ -n "$line" ]]; do 
    sed -i -r '1s/\b'"$(awk '{print $1}' <<< "$line")"'\b/'"$(awk '{print $2}' <<< "$line")"'/g' dataframe.txt 
done < variables.txt 

Ausgang:

$ cat dataframe.txt 
123 456 789 
1 2 3 
4 5 6 
7 8 9 
[email protected]:~/temp2$ cat variables.txt 
123 A 
456 B 
789 C 
$ ./script.bash 
$ cat dataframe.txt 
A B C 
1 2 3 
4 5 6 
7 8 9 
$ 
+0

lesen http://unix.stackexchange.com/questions/169716/why-is-using-a-shell-Schleife-zu-Prozess-Text-betrachtet-schlecht-Übung, um zu verstehen, warum die Verwendung einer Shell-Schleife nur zur Manipulation von Text immer der falsche Ansatz ist. –

+1

@EdMorton Danke .. wird dies im Hinterkopf behalten – ritesht93

Verwandte Themen