在awk
下面,我尝试通过添加所使用的文件中的原始值是否包含 a来$2
在输出中添加调整。第 2 行就是一个例子。在我当前的情况下,我的逻辑不正确,因为我正在查找并拆分并将值存储在“数组”中(如果有的话)并将字段的计数保留在 中。根据我打印分割或不分割的输出中的计数。在我的实际数据中可能有数百行,但格式始终相同。看起来很接近,但还不够。谢谢 :)。+1
$2
-
in
awk
$2
-
num
num
在
chr15 91543131 AAW33B
chr8 100493900-100493909 SBSA
awk
awk '{num=split($2,array,"[ -]");if(num==3){print $1,$2-1,$2,$3};if(num==4){print $1,array[1],array[2],array[2],$3}}' in | column -t
想要的 tab-delimited
chr15 91543130 91543131 AAW33B
chr8 100493900 100493909 SBSA
答案1
鉴于此输入:
chr15 91543131 AAW33B
chr8 100493900-100493909 SBSA
我们可以简单地awk
根据/[ -]/
(即空格或者a-
作为字段分隔符)。我们还可以只提供awk
一个制表符作为输出字段分隔符,这意味着我们不再需要column -t
:
$ awk 'BEGIN { FS = "[ -]"; OFS="\t" } NF==3 { print $1, $2 - 1, $2, $3 } NF==4 { print $1, $2, $3, $4 }' input
chr15 91543130 91543131 AAW33B
chr8 100493900 100493909 SBSA
或者,我们可以保留字段分隔符,只查看第二个字段是否包含-
:
$ awk 'BEGIN { OFS="\t" } $2 !~ /-/ { print $1, $2 - 1, $2, $3 } $2 ~ /-/ { split( $2, a, "-" ); print $1, a[1], a[2], $3 }' input
chr15 91543130 91543131 AAW33B
chr8 100493900 100493909 SBSA