下面的awk
分割似乎是在输出中的$ 4~之后留下了空格,我似乎无法阻止它。什么是正确的语法?谢谢你:)。
输入
chr1 955543 955763 + AGRN-6|pr=2|gc=75
chr1 957571 957852 + AGRN-7|pr=3|gc=61.2
chr1 970621 970740 + AGRN-8|pr=1|gc=57.1
当前输出
chr1 955543 955763 + AGRN-6|gc=75
chr1 957571 957852 + AGRN-7|gc=61.2
chr1 970621 970740 + AGRN-8|gc=57.1
gawk '{print gensub(/(^[^|]+)\|[^|]+([|][^+]+).*/,"\\1\\2","g",$0)}' input
修改
chr1^I955543^I955763^I+ AGRN-6|gc=75$
chr1^I957571^I957852^I+ AGRN-7|gc=61.2$
chr1^I970621^I970740^I+ AGRN-8|gc=57.1$
期望的
chr1^I955542^I955662^I+^IAGRN_70$
chr1^I955643^I955763^I+^IAGRN_71$
chr1^I957570^I957690^I+^IAGRN_72$
答案 0 :(得分:2)
另一个好奇的 awk
替代方案:
awk '{print $1""$2}' FS='pr=[0-9]\\|' file
<强>结果
chr1 955543 955763 + AGRN-6|gc=75
chr1 957571 957852 + AGRN-7|gc=61.2
chr1 970621 970740 + AGRN-8|gc=57.1
<强>解释强>
FS
的值可以是任意regex
,因此我们可以使用pr=[0-9]|
作为分隔符,并在其前后打印字段。
答案 1 :(得分:1)
awk '{n=split($5, a, "|"); print $1,$2,$3,$4" "a[1]"|"a[3]}' OFS="\t" input
答案 2 :(得分:1)
awk
将使用指定的OFS重写该行。如果要保留输入间距,可以使用sed
sed -r 's/\|.*\|/\|/' file
chr1 955543 955763 + AGRN-6|gc=75
chr1 957571 957852 + AGRN-7|gc=61.2
chr1 970621 970740 + AGRN-8|gc=57.1