我有这样一个数据:
foo foo scaffold_7 1 4845 6422 4845
bar bar scaffold_7 -1 14689 16310 16310
我想做的是处理上面的行,我只想打印第1,2,3,7列和第7列之后的一列。但打印第7列之前的条件。
下面是我的awk脚本:
awk '{
if ($4=="+") { {end=$6-$5}{print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $7 "\t" end+$7} }
else
{end=$6-$5}{print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $7-end "\t" $7}
}'
但为什么它没有达到预期的效果呢?
foo foo scaffold_7 1 4845 6422
bar bar scaffold_7 -1 14689 16310
注意算术(例如$7-end
或end+$7
)是必须的。所以我们不能只是从输入文件交换列。而且这个AWK将在一个bash脚本中。
4条答案
按热度按时间c0vxltue1#
试试看:
我从来没有在花括号中使用过花括号,因此我更喜欢使用分号分隔符。我非常确定else子句在您的示例中 * 仅 * 绑定到
{end=$6-$5}
,而不是绑定到两个花括号中的条目。在这种情况下,{print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $7-end "\t" $7}
将在 * 所有 * 行上执行。laawzig22#
lnvxswe23#
或者将其压缩为一行代码,而不重复
print
语句:9wbgstp74#