替换多个制表符分隔文件的列标题

时间:2016-06-29 15:42:01

标签: unix awk

我有100多个带有相同列名的制表符分隔文件。我想更改其中一个列名(第2列)来自' OLD'到'新'在批处理中的所有文件中。其余内容在文件中保持相同 任何人都可以帮我解决如何用awk做的事情吗?

例如。 file.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

我想改变旧的'到'新':

   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

我尝试过以下脚本

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

1 个答案:

答案 0 :(得分:0)

这是在sed

中执行此操作的一种方法
$ sed -i'.bak' -r '1s/([^\t]*\t)OLD/\1NEW/' file

如果您想要更改文件,sed是更好的选择。你可以循环完成所有事情

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

awk替代可以是

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