【问题标题】:Bash: change header of file according to line in another file [duplicate]Bash:根据另一个文件中的行更改文件头[重复]
【发布时间】:2016-07-23 17:11:06
【问题描述】:

我在文本文件 (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 就可以解决问题..

谢谢!

【问题讨论】:

    标签: linux bash awk header


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      下面是您的场景的简单 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
      $
      

      【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2019-07-16
      • 2021-01-28
      相关资源
      最近更新 更多