2015-11-07 77 views
2

我想解析输入awk以包括|gc= in $4,但我不能。以下为收盘:awk解析字段,并包含1管道的文本

awk至今:

awk '{sub(/\|[^[:blank:]]+[[:blank:]]+[0-9]+/, ""); print }' 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 + 
chr1 957571 957852 AGRN-7 + 
chr1 970621 970740 AGRN-8 + 

所需的输出(每个字段由制表符分隔)

chr1 955543 955763 AGRN-6|gc=75 + 
chr1 957571 957852 AGRN-7|gc=61.2 + 
chr1 970621 970740 AGRN-8|gc=57.1 + 

编辑

gawk '{gensub(/\|[^[:blank:]]+[[:blank:]]+[0-9]+[\]+/, ""); print }' input.txt > output.txt 
gawk: cmd. line:1: {gensub(/\|[^[:blank:]]+[[:blank:]]+[0-9]+[\]+/, ""); print } 
gawk: cmd. line:1:  ^unterminated regexp 
gawk: cmd. line:1: error: Unmatched [ or [^: /\|[^[:blank:]]+[[:blank:]]+[0-9]+[\]+/, ""); print }/ 

也试过此awk,但这只是打印原始输入:

awk '{sub(/\|[^[:blank:]]+[[:blank:]]+[0-9]+[[|blank|]]+/, ""); print }' input.txt > output.txt 
+1

它看起来像你的输入数据制表符分隔。那是对的吗?你想要制表符分隔的输出吗?阅读关于'split()'函数。祝你好运 – shellter

+1

你有GNU awk吗?如果是这样,gensub()是你想要的,而不是sub()。 –

+0

我会阅读关于拆分,并有GNU'awk',但不熟悉'gensub()'。谢谢 :)。 – Chris

回答

1

这接近:(不包括|但这并不重要)

awk '{split($4,a,"|"); print $1,$2,$3,a[1],a[3],$6}' input.txt 
chr1 955543 955763 AGRN-6 gc=75 + 
chr1 957571 957852 AGRN-7 gc=61.2 + 
chr1 970621 970740 AGRN-8 gc=57.1 + 

谢谢@shelter :)

+0

有几种方法可以在输出中获得'|'字符。最简单的方法是插入到输出字符串中,例如'print $ 1,$ 2,$ 3,a [1]“|”a3,$ 6}'注意字符和字符串是如何用db引号包围的,''|“ ',但变量不加引号。祝你好运。 – shellter

0
awk 'BEGIN{FS="[ ]+|[|]+"};{print $1,$2,$3"|"$6 }' 

编辑:使用GAWK

gawk '{print gensub(/(^[^|]+)\|[^|]+([|][^+]+).*/,"\\1\\2","g",$0)}' my_file 
1
awk -F'|' '{sub(/ 0 /,"")}{print $1"|"$3}' file 
chr1 955543 955763 AGRN-6|gc=75 + 
chr1 957571 957852 AGRN-7|gc=61.2 + 
chr1 970621 970740 AGRN-8|gc=57.1 + 

首先管用作字段分隔符。重点是摆脱第二列。它被没有任何逗号的管道替换,以将第一和第三列紧紧地连在一起。这样做零符号在加号旁边。因此,在打印动作之前,零点必须被移除,在这种情况下,通过sub和一个模式来消除所有零点。我用/ space0space /。

+0

请解释你的代码! – aschipfl

1

你总是可以尝试多级,每级很简单,利用awk的构建插件

$ awk -F'|' '{print $1"|"$3}' file 
    | awk -v OFS="\t" '{print $1,$2,$3,$4,$6}' 

chr1 955543 955763 AGRN-6|gc=75 + 
chr1 957571 957852 AGRN-7|gc=61.2 + 
chr1 970621 970740 AGRN-8|gc=57.1 +