如果在列中找到模式,则将特定值添加到bash中的下一列

时间:2019-07-18 09:08:58

标签: bash awk

我有一个包含2列的文件,我希望这样,如果在第二列中找到特定值,则将“ 1”添加到第三列中。如果找不到该模式,则应将“ 0”添加到第三列。 如果尝试了以下代码,但它不起作用...

if grep -F "PATTERN" myfile.txt; then
        awk '{print $1, $2, $3 == 1}'
else
        awk '{print $1, $2, $3 == 0}’
fi

我的输入看起来像这样:

ID1    Pop1
ID2    Pop1
ID3    PATTERN

我想要的输出将是:

ID1    Pop1    0
ID2    Pop1    0
ID3    PATTERN    1

4 个答案:

答案 0 :(得分:2)

这将匹配包含PATTERN的字符串,并在最后一列中添加1或0。 FS是文件分隔符。您可以根据需要使用" "标签

awk '{if ( $2 ~ /PATTERN/ ) {print $0 FS "1"} else {print $0 FS "0"}}' file

答案 1 :(得分:2)

wrt $3 == 1在脚本中,我假设您试图将值1分配给$3-像许多语言一样,==用于比较,{{ 1}}用于分配。

=

或者如果您喜欢高尔夫:

$ awk '{print $0, ($2=="PATTERN")}' file
ID1    Pop1 0
ID2    Pop1 0
ID3    PATTERN 1

答案 2 :(得分:1)

简短的awk版本

awk '$2~/PATTERN/?$0=$0FS 1:$0=$0FS 0' file
ID1    Pop1 0
ID2    Pop1 0
ID3    PATTERN 1

如果找到PATTERN,请添加1,否则请添加0。默认操作是打印。

$2~/PATTERN/ ?$0=$0FS 1 :$0=$0FS 0
---Test----- --True?--- --False?--

答案 3 :(得分:0)

awk '
    match( $2, /PATTERN*/) {
        print $1 " " $2 " " 1
    }
    !match( $2, /PATTERN*/ ) {
        print $1 " " $2 " " 0
    }
    ' < $yourfile                

您可以更改它以使您想要的图案具体化。