我在文本文件(dataframe.txt)中有一个数据集,文件的标题是数字中的变量名。数字的含义(变量的实际名称)存储在另一个文件(variables.txt)中。例如(为简单起见编辑:
> head dataframe.txt
123 456 789
1 2 3
4 5 6
7 8 9
> variables.txt
123 A
456 B
789 C
我想将dataframe.txt的标题更改为存储在variables.txt文件中的名称。数字和名称之间的联系需要保持不变。所需的输出是:
> head dataframe.txt
A B C
1 2 3
4 5 6
7 8 9
有没有办法根据另一个将数字与名称相关联的文件来更改标题?我可以想象,几行awk可以做到这一点。
谢谢!
答案 0 :(得分:1)
以下是适用于您的方案的简单bash脚本:
文件名: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
输出:
$ cat dataframe.txt
123 456 789
1 2 3
4 5 6
7 8 9
force@force-virtual-machine:~/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
$
答案 1 :(得分: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