【问题标题】:Change names of a columns using a mapping file使用映射文件更改列的名称
【发布时间】:2020-06-14 03:19:28
【问题描述】:

我有一个包含 3 列的文件,如下所示:

NC_0001 10 x
NC_0001 11 x
NC_0002 90 y

我想使用另一个包含转换的文件 .txt 来更改第一列的名称,就像:

NC_0001 1
NC_0001 1
NC_0002 2

...

所以最后我应该有:

1 10 x
1 11 x
2 90 y

我该怎么做? 附言第一个文件非常大(50 GB),所以我必须使用 awk 之类的 unix 命令。

【问题讨论】:

  • 欢迎来到 Stack Overflow。 SO 是面向专业和热情的程序员的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。

标签: shell file dictionary unix awk


【解决方案1】:
awk -f script.awk map_file data_file
NR == FNR {                  # for the first file
    tab[$1] = $2             # create a k/v of the colname and rename value
}

NR != FNR {                  # for the second file
    $1 = tab[$1]             # set first column equal to the map value
    print                    # print
}

单排

awk 'NR==FNR{t[$1]=$2} NR!=FNR{$1=t[$1];print}' map_file data_file

如果可能,您应该拆分第一个文件并在每个分区文件上并行运行此命令。然后,加入结果。

【讨论】:

  • 如果我想跳过数据文件的第一行,我只使用 NR > 1。我应该在代码中的哪里添加?
  • 只要把条件改成NR != FNR && FNR > 1
猜你喜欢
  • 1970-01-01
  • 2020-10-06
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多