Awk 更改文本文件的外观

Awk 更改文本文件的外观,awk,Awk,我有一个文本文件如下 >1KKW IYLCAVLLIL >1WY6 GSLLILKR >1Z23 LTLQQVINLAFQ >1ZQS >2B25 AV >2L3Z LLIL >2OPT >3AZO SFNVAKR 我想安排上述文件如下所示。我怎样才能用awk做到这一点?谢谢你的帮助 期望输出 1KKW IYLCAVLLIL 1WY6 GSLLILKR 1Z23 LTLQQVINLAFQ 1ZQS no res

我有一个文本文件如下

>1KKW
IYLCAVLLIL
>1WY6
GSLLILKR
>1Z23
LTLQQVINLAFQ
>1ZQS

>2B25
AV
>2L3Z
LLIL
>2OPT

>3AZO
SFNVAKR
我想安排上述文件如下所示。我怎样才能用awk做到这一点?谢谢你的帮助

期望输出

1KKW     IYLCAVLLIL
1WY6     GSLLILKR
1Z23     LTLQQVINLAFQ
1ZQS     no residues
2B25     AV
2L3Z     LLIL
2OPT     no residues
3AZO     SFNVAKR

这是一个
awk

awk 'NF {$2="\t"($2==""?"no residues":$2)} NF' RS=\> file
1KKW    IYLCAVLLIL
1WY6    GSLLILKR
1Z23    LTLQQVINLAFQ
1ZQS    no residues
2B25    AV
2L3Z    LLIL
2OPT    no residues
3AZO    SFNVAKR
这里我确实使用了
作为记录选择器,因为它应该给出行的开头

然后将下一个数据打印为
$2
,如果
$2
中没有数据,请使用
“无残留”

这是一个多行
sed
解决方案

命令:

sed -e '{
N
s/\n/\t/
s/>//g
s/\t$/\tno residues/g
}' text.txt

结果:


您可以将“\t”移动到赋值前面的公共区域,而不是复制它。由于非括号三元表达式,它将在某些AWK中失败并出现语法错误,并且如果$2包含计算结果为数字零的字符串,它将错误地打印“无剩余”。它应该写为:
awk'NF{$2=“\t”($2==”?“无残留物”:$2)}NF'RS=\>文件
,但我想它会更清晰,因为
awk'NR>1{$2=“\t”($2==”?“无残留物”):$2;print}'RS=\>文件
@EdMorton我也看到了那个解决方案,但去掉
\t
并没有保存任何字节,因为我需要添加
。但它看起来更干净,所以我改变了它。@Jotne是的,我不知道历史是什么或标准是怎么说的,但在OSX上的awk中,例如,在某些情况下可以使用非括号三元表达式,但在其他情况下不能使用。例如,这很好:
awk'BEGIN{printf”%s\n,NR%3?0:$1}'
这很好:
awk'BEGIN{printf”%s\n',(NR==3?0:$1)}'
但这是一个语法错误:
awk'BEGIN{printf”%s\n',NR==3?0:$1}'
。与其担心如果没有帕伦斯,它是否会失败,我认为最好总是用括号括起来。@EdMorton观点和解释都很好。我确实喜欢便携的解决方案,所以记住所有这些调整和技巧是很重要的。不公平,你还没有任何开明或好的答案徽章+1感谢迄今为止在awk标签上所做的所有出色工作!是的,我知道这个问题需要一个awk解决方案。因为已经提供了两个awk解决方案,所以我加入了一个sed解决方案。真的有必要否决它吗?你刚刚采纳了我的高尔菲德解决方案,让它变得更糟,并将其作为你自己的方案发布。事实上,我从未见过你的高尔菲德解决方案。我相信你是一位出色的sed专家,但这一行是使用sed手册页和我头脑中已有的信息独立创建的。是的,它并不完美,因为它在一条线上完成了3次传球,但我从来没有说过它是完美的。
1KKW    IYLCAVLLIL
1WY6    GSLLILKR
1Z23    LTLQQVINLAFQ
1ZQS    no residues
2B25    AV
2L3Z    LLIL
2OPT    no residues
3AZO    SFNVAKR
$ awk '{printf "%s", ( sub(/^>/,"") ? $0"\t" : (NF?$0:"no residues")ORS )}' file
1KKW    IYLCAVLLIL
1WY6    GSLLILKR
1Z23    LTLQQVINLAFQ
1ZQS    no residues
2B25    AV
2L3Z    LLIL
2OPT    no residues
3AZO    SFNVAKR