我想提取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
所有改变的是g
更改为大写后的AA=
。
答案 0 :(得分:1)
关注awk
可能对您有帮助。
awk '
{
match($0,/AA=[^|]*/);
print substr($0,1,RSTART+2) toupper(substr($0,RSTART+3,RLENGTH-3)) substr($0,RSTART+RLENGTH)
}
' Input_file
答案 1 :(得分:1)
使用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
或其他案例修饰符g
修饰符