如何通过Unix和awk命令有条件地用同一行中特定列的值replace列中的值

我想通过Unix和awk命令有条件地用同一行中特定列的值replace列中的值。

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

1 A . C . 2 CT . T 3 TCC . 

有 ”。” 在第3至第5列。我想replace那些“。” 在第3 – 5列中,第2列中的值在同一行上。

你能告诉我任何方向吗?

这似乎是做你所要求的:

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

您现在已经在awk上提出了几个问题(并且没有接受答案!)。 我可以谦虚地建议一个教程吗?

 awk '{OFS="\t"; for(i=3;i<=5;i++) if($i==".") $i=$2; print}' myfile.txt