linux - 如何通过 Unix 和 awk 命令有条件地将列中的值替换为同一行中特定列的值

标签 linux unix awk

我想通过 Unix 和 awk 命令有条件地将列中的值替换为一个文件中同一行中特定列的值。

例如,我有 myfile.txt(3 行,5 列,制表符分隔):

1 A . C .
2 C T . T
3 T C C .

有“.”在第 3 至 5 列中。我想替换那些“。”第 3 - 5 列中的值与同一行中第 2 列中的值。

你能告诉我任何方向吗?

最佳答案

这似乎可以满足您的要求:

% awk 'BEGIN {
     IFS = OFS = "\t"
  }
  {
     for (column = 3; column <= NF; ++column) {
        if ($column == ".") {
            $column = $2
        }
     }    
     print 
  }         
' test.tsv
1       A       A       C       A
2       C       T       C       T
3       T       C       C       T

您现在已经在 awk 上问了几个问题(并且没有接受任何答案!)。可能 虚心建议a tutorial

关于linux - 如何通过 Unix 和 awk 命令有条件地将列中的值替换为同一行中特定列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6224869/

相关文章:

Linux平台下PHP gettext返回非utf8字符串

c++ - 为什么文件输入会在读取时抛出 EAGAIN?

c - 谁抛出段错误?

c++ - 奇怪的执行行为

linux - 如何合并唯一值和重复列

bash - 如何复制列?

linux - 在文本文件中读取/运行环境变量

linux - 在 awk 中查找多个公共(public)值

linux - 使用awk和grep相加

Node.js 已安装但无法使用