awk中的更多条件;根据条件添加列

问题描述 投票:0回答:2

如何根据第1列的条件添加第5列?

输入:

word2       1   2   3  
word3       5   6   2   
word2       8   9   6
word1       5   6   6
word5       7   8   8
word4       9   8   6

awk '{ if ( ( $1 ~ /word1/ {$5 == "0.0697") &&
            ( $1 ~ /word2/ {$5 == "0.0645") &&
            ( $1 ~ /word3/ {$5 == "0.0655") &&
            ( $1 ~ /word4/ {$5 == "0.0677") &&
            ( $1 ~ /word5/ {$5 == "0.0678") ) {print $1, $2, $3, $4, $5}}' input > output

所需输出输出:

word2       1   2   3   0.0645
word3       5   6   2   0.0655
word2       8   9   6   0.0645
word1       5   6   6   0.0697
word5       7   8   8   0.0678
word4       9   8   6   0.0677
awk
2个回答
1
投票

您能不能尝试以下操作。

awk '{ if( $1 ~ /word1/) {$5 = "0.0697"}
       else if ( $1 ~ /word2/) {$5 = "0.0645"}
       else if ( $1 ~ /word3/) {$5 = "0.0655"}
       else if ( $1 ~ /word4/) {$5 = "0.0677"}
       else if ( $1 ~ /word5/) {$5 = "0.0678"}
     }
{
   print $1, $2, $3, $4, $5
}
'  Input_file

或者您也可以在如下代码中将1替换为print $1, $2, $3, $4, $5

awk '{ if( $1 ~ /word1/) {$5 = "0.0697"}
       else if ( $1 ~ /word2/) {$5 = "0.0645"}
       else if ( $1 ~ /word3/) {$5 = "0.0655"}
       else if ( $1 ~ /word4/) {$5 = "0.0677"}
       else if ( $1 ~ /word5/) {$5 = "0.0678"}
     }
1
'  Input_file

OP的方法存在问题:

{$5 == "0.0697")

1-我们不应使用用于检查条件的==,而应使用=

2-在分配值时使用}将其关闭。


2
投票
awk '$1 ~ /word1/ {$5 = "0.0697"};
     $1 ~ /word2/ {$5 = "0.0645"};
     $1 ~ /word3/ {$5 = "0.0655"};
     $1 ~ /word4/ {$5 = "0.0677"};
     $1 ~ /word5/ {$5 = "0.0678"}; 
     {print}' file

输出:

字2 1 2 3 0.0645字3 5 6 2 0.0655字2 8 9 6 0.0645字1 5 6 6 0.0697字5 7 8 8 0.0678字4 9 8 6 0.0677
© www.soinside.com 2019 - 2024. All rights reserved.