awk解析输入并删除字段中的文本

awk解析输入并删除字段中的文本,awk,Awk,试图使用awk解析文件,但没有得到所需的输出,我似乎无法理解。谢谢:) input.txt chr1 955543 955763 AGRN-6|pr=2|gc=75 0 + chr1 957571 957852 AGRN-7|pr=3|gc=61.2 0 + chr1 970621 970740 AGRN-8|pr=1|gc=57.1 0 + chr1 955543 955763 AGRN-6 pr=2 gc=75 0 + ch

试图使用
awk
解析文件,但没有得到所需的输出,我似乎无法理解。谢谢:)

input.txt

chr1    955543  955763  AGRN-6|pr=2|gc=75   0   +
chr1    957571  957852  AGRN-7|pr=3|gc=61.2 0   +
chr1    970621  970740  AGRN-8|pr=1|gc=57.1 0   +
chr1    955543  955763  AGRN-6 pr=2 gc=75   0   +

chr1    957571  957852  AGRN-7 pr=3 gc=61.2 0   +

chr1    970621  970740  AGRN-8 pr=1 gc=57.1 0   +
当前输出.txt

chr1    955543  955763  AGRN-6|pr=2|gc=75   0   +
chr1    957571  957852  AGRN-7|pr=3|gc=61.2 0   +
chr1    970621  970740  AGRN-8|pr=1|gc=57.1 0   +
chr1    955543  955763  AGRN-6 pr=2 gc=75   0   +

chr1    957571  957852  AGRN-7 pr=3 gc=61.2 0   +

chr1    970621  970740  AGRN-8 pr=1 gc=57.1 0   +
所需输出.txt
|pr=2 | gc=75 0
,以及行与行之间的空格)从输出中删除

chr1    955543  955763  AGRN-6  +
chr1    957571  957852  AGRN-7  +
chr1    970621  970740  AGRN-8  +
以下是我尝试过的:

awk -F"[*|]" '{print $1, $2, $3, $4, $5, $6,}' input.txt > output.txt
您可以这样做:

awk -F '[[:blank:]]+|\\|' '{print $1, $2, $3, $4, $NF}'
这将为您提供所需的字段,但不会保持间距。这将:

awk '{sub(/\|[^[:blank:]]+[[:blank:]]+[0-9]+/, ""); print }' <<END
chr1    955543  955763  AGRN-6|pr=2|gc=75   0   +
chr1    957571  957852  AGRN-7|pr=3|gc=61.2 0   +
chr1    970621  970740  AGRN-8|pr=1|gc=57.1 0   +
END
您可以这样做:

awk -F '[[:blank:]]+|\\|' '{print $1, $2, $3, $4, $NF}'
这将为您提供所需的字段,但不会保持间距。这将:

awk '{sub(/\|[^[:blank:]]+[[:blank:]]+[0-9]+/, ""); print }' <<END
chr1    955543  955763  AGRN-6|pr=2|gc=75   0   +
chr1    957571  957852  AGRN-7|pr=3|gc=61.2 0   +
chr1    970621  970740  AGRN-8|pr=1|gc=57.1 0   +
END

可能是最简单的解决方案:

awk -F"|" '{print $1"   +"}' input.txt > output.txt
但是,在此解决方案中,后面的“+”是手动添加的。输出:

chr1    955543  955763  AGRN-6   +
chr1    957571  957852  AGRN-7   +
chr1    970621  970740  AGRN-8   +
否则,请尝试

 awk -F"[| ]+" '{print $1, $2, $3, $4, $8}' input.txt > output.txt
哪个输出

chr1 955543 955763 AGRN-6 +
chr1 957571 957852 AGRN-7 +
chr1 970621 970740 AGRN-8 +

可能是最简单的解决方案:

awk -F"|" '{print $1"   +"}' input.txt > output.txt
但是,在此解决方案中,后面的“+”是手动添加的。输出:

chr1    955543  955763  AGRN-6   +
chr1    957571  957852  AGRN-7   +
chr1    970621  970740  AGRN-8   +
否则,请尝试

 awk -F"[| ]+" '{print $1, $2, $3, $4, $8}' input.txt > output.txt
哪个输出

chr1 955543 955763 AGRN-6 +
chr1 957571 957852 AGRN-7 +
chr1 970621 970740 AGRN-8 +
另一种选择(如果您不关心输出间距)

另一种选择(如果您不关心输出间距)