Dataframe 使用条件awk语句创建具有附加值的新字段
问题 如何使用awk创建一个具有$2+一致值的新字段? 我计划循环浏览一系列值,但我不介意为每个命令使用一行 伪代码Dataframe 使用条件awk语句创建具有附加值的新字段,dataframe,awk,Dataframe,Awk,问题 如何使用awk创建一个具有$2+一致值的新字段? 我计划循环浏览一系列值,但我不介意为每个命令使用一行 伪代码 awk '$1 == Bob {$4 = $2 + 400}' file 样本数据 Philip 13 2 Bob 152 8 Bob 4561 2 Bob 234 36 Bob 98 12 Rey 147 152 Rey 15 1547 预期产出 Philip 13 2 Bob 152 8 408 Bob 4561 2 40
awk '$1 == Bob {$4 = $2 + 400}' file
样本数据
Philip 13 2
Bob 152 8
Bob 4561 2
Bob 234 36
Bob 98 12
Rey 147 152
Rey 15 1547
预期产出
Philip 13 2
Bob 152 8 408
Bob 4561 2 402
Bob 234 36 436
Bob 98 12 412
Rey 147 152
Rey 15 1547
在这里,检查
$1
是否等于Bob,并通过在$0
中添加$2 FS 400
来重建记录($0
)。这里的FS
是第三和第四个字段之间使用的字段分隔符1
最后表示告诉awk采取默认操作,即打印
awk '$1=="Bob"{$0=$0 FS $2 + 400}1' file
Philip 13 2
Bob 152 8 552
Bob 4561 2 4961
Bob 234 36 634
Bob 98 12 498
Rey 147 152
Rey 15 1547
或者,如果您想将name(Bob)保留为变量
awk -vname="Bob" '$1==name{$0=$0 FS $2 + 400}1' file
只需引用Bob,还需要添加第三个字段,而不是第二个字段
$ awk '$1=="Bob" {$4=$3+400}1' file | column -t
Philip 13 2
Bob 152 8 408
Bob 4561 2 402
Bob 234 36 436
Bob 98 12 412
Rey 147 152
Rey 15 1547
第一个解决方案:请您也尝试一下以下内容。我在这里使用的是NF
和NF+1
awk
的现成变量。其中,$NF
表示当前行的最后一列的值,$(NF+1)
将在找到st field string
Bob`的条件时创建一个附加列
awk '{$(NF+1)=$1=="Bob"?400+$NF:""} 1' OFS="\t" Input_file
第二种解决方案:如果我们不想创建一个新字段,只想根据条件打印值,那么请尝试以下方法,我相信这应该会更快
awk 'BEGIN{OFS="\t"}{$1=$1;print $0,$1=="Bob"?400+$NF:""}' Input_file
输出如下
Philip 13 2
Bob 152 8 408
Bob 4561 2 402
Bob 234 36 436
Bob 98 12 412
Rey 147 152
Rey 15 1547
解释:现在为上述代码添加解释
awk ' ##Starting awk program here.
{
$(NF+1)=$1=="Bob"?400+$NF:"" ##Creating a new last field here whose value will be depending upon condition check.
##its checking condition if 1st field is having Bob string in it then add 400 value to last field value or make it NULL.
}
1 ##awk works on method of condition then action. so by mentioning 1 making condition TRUE here and NO action defined so by default print of current line will happen.
' OFS="\t" Input_file ##Setting OFS as TAB here where OFS ois output field separator and mentioning Input_file name here.
哇,那真的很简单。你介意解释一下1在行尾的作用吗?awk不会自动打印,你必须告诉它。一个不带引号的字符串被视为变量,而一个未初始化的变量被视为空字符串或数字零。@严重的,你能检查一下这个并让我知道吗?