как условно заменить значения в столбцах значением определенного столбца в одной строке командами Unix и awk - PullRequest
3 голосов
/ 03 июня 2011

Я хочу условно заменить значения в столбцах значением определенного столбца в одной строке в одном файле командами Unix и awk.

Например, у меня есть myfile.txt (3 строки, 5 столбцов, разделенные табуляцией):

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

Есть "." в столбцах с 3 по 5. Я хочу заменить те "." в столбцах 3 - 5 со значением в столбце 2 в той же строке.

Не могли бы вы показать мне, как это сделать?

Ответы [ 2 ]

4 голосов
/ 03 июня 2011
awk '{FS="\t"; for(i=3;i<=5;i++) if($i==".") $i=$2; print}' myfile.txt
4 голосов
/ 03 июня 2011

Это похоже на то, что вы просите:

% 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. май Я скромно предлагаю учебник ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...