awk:按条件识别列,更改值,最后打印所有列
awk: identify column by condition, change value, and finally print all columns
我想提取 AA
之后的文件的每一行中的值。我可以这样做:
awk -F'[;=|]' '{for(i=1;i<=NF;i++)if($i=="AA"){print toupper($(i+1));next}}'
这为我提供了我需要的确切信息并将其转换为大写,这正是我想要做的。我怎样才能做到这一点,然后在其先前位置打印具有此更改值的整行?我实际上是在尝试查找并替换值更改为大写的位置。
编辑:
这是一个示例输入行:
11 128196 rs576393503 A G 100 PASS AC=453;AF=0.0904553;AN=5008;NS=2504;DP=5057;EAS_AF=0.0159;AMR_AF=0.0259;AFR_AF=0.3071;EUR_AF=0.006;SAS_AF=0.0072;AA=g|||;VT=SNP
这是我希望输出的样子:
11 128196 rs576393503 A G 100 PASS AC=453;AF=0.0904553;AN=5008;NS=2504;DP=5057;EAS_AF=0.0159;AMR_AF=0.0259;AFR_AF=0.3071;EUR_AF=0.006;SAS_AF=0.0072;AA=G|||;VT=SNP
变化的只是AA=
后的g
变成大写
以下 awk
可能会对您有所帮助。
awk '
{
match([=10=],/AA=[^|]*/);
print substr([=10=],1,RSTART+2) toupper(substr([=10=],RSTART+3,RLENGTH-3)) substr([=10=],RSTART+RLENGTH)
}
' Input_file
使用 GNU sed
和 perl
,使用单词边界
$ echo 'SAS_AF=0.0072;AA=g|||;VT=SNP' | sed 's/\bAA=[^;=|]*\b/\U&/'
SAS_AF=0.0072;AA=G|||;VT=SNP
$ echo 'SAS_AF=0.0072;AA=g|||;VT=SNP' | perl -pe 's/\bAA=[^;=|]*\b/\U$&/'
SAS_AF=0.0072;AA=G|||;VT=SNP
\U
将跟随它的大写字符串直到结束或 \E
或另一个 case-modifier
- 如果每行可以有多个匹配项,则使用
g
修饰符
我想提取 AA
之后的文件的每一行中的值。我可以这样做:
awk -F'[;=|]' '{for(i=1;i<=NF;i++)if($i=="AA"){print toupper($(i+1));next}}'
这为我提供了我需要的确切信息并将其转换为大写,这正是我想要做的。我怎样才能做到这一点,然后在其先前位置打印具有此更改值的整行?我实际上是在尝试查找并替换值更改为大写的位置。
编辑:
这是一个示例输入行:
11 128196 rs576393503 A G 100 PASS AC=453;AF=0.0904553;AN=5008;NS=2504;DP=5057;EAS_AF=0.0159;AMR_AF=0.0259;AFR_AF=0.3071;EUR_AF=0.006;SAS_AF=0.0072;AA=g|||;VT=SNP
这是我希望输出的样子:
11 128196 rs576393503 A G 100 PASS AC=453;AF=0.0904553;AN=5008;NS=2504;DP=5057;EAS_AF=0.0159;AMR_AF=0.0259;AFR_AF=0.3071;EUR_AF=0.006;SAS_AF=0.0072;AA=G|||;VT=SNP
变化的只是AA=
后的g
变成大写
以下 awk
可能会对您有所帮助。
awk '
{
match([=10=],/AA=[^|]*/);
print substr([=10=],1,RSTART+2) toupper(substr([=10=],RSTART+3,RLENGTH-3)) substr([=10=],RSTART+RLENGTH)
}
' Input_file
使用 GNU sed
和 perl
,使用单词边界
$ echo 'SAS_AF=0.0072;AA=g|||;VT=SNP' | sed 's/\bAA=[^;=|]*\b/\U&/'
SAS_AF=0.0072;AA=G|||;VT=SNP
$ echo 'SAS_AF=0.0072;AA=g|||;VT=SNP' | perl -pe 's/\bAA=[^;=|]*\b/\U$&/'
SAS_AF=0.0072;AA=G|||;VT=SNP
\U
将跟随它的大写字符串直到结束或\E
或另一个 case-modifier- 如果每行可以有多个匹配项,则使用
g
修饰符