我有一个包含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
答案 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
您可以更改它以使您想要的图案具体化。