使用awk从文本文件中提取特定字符数
我有一个像这样的文本文件。我想提取“A”和“E”字符的总数使用awk从文本文件中提取特定字符数,awk,Awk,我有一个像这样的文本文件。我想提取“A”和“E”字符的总数 >pr1 FSVSQNNPAE >pr2 MAKERAHSQ >pr3 RRRDKINNWIVQL 我想得到这样的输出 >pr1 Total number of A - 1 Total number of E - 1 >pr2 Total number of A – 2 Total number of E - 1 >pr3 Total number of A – 0 Total num
>pr1
FSVSQNNPAE
>pr2
MAKERAHSQ
>pr3
RRRDKINNWIVQL
我想得到这样的输出
>pr1
Total number of A - 1
Total number of E - 1
>pr2
Total number of A – 2
Total number of E - 1
>pr3
Total number of A – 0
Total number of E – 0
如何使用awk实现此目的?单向。当找到以
开头的行时,读取下一行,将其保存在str
变量中,并计算每个字母的替换数
awk '
$1 ~ /^>/ {
getline str
num_a = gsub( /A/, "", str )
num_e = gsub( /E/, "", str )
printf "%s\nTotal number of A - %d\nTotal number of E - %d\n\n", $0, num_a, num_e
}
' infile
输出:
>pr1
Total number of A - 1
Total number of E - 1
>pr2
Total number of A - 2
Total number of E - 1
>pr3
Total number of A - 0
Total number of E - 0
更新:这将通过动态更改
FS
()来实现:
{
if ($0 ~ /^>/)
printf("\n%s\n", $0);
else
{
FS="A"
nl = $0;
$0 = nl;
print "Total number of A - ", NF-1;
FS="E"
$0 = nl;
print "Total number of E - ", NF-1;
}
}
给出:
>pr1
Total number of A - 1
Total number of E - 1
>pr2
Total number of A - 2
Total number of E - 1
>pr3
Total number of A - 0
Total number of E - 0
以前的解决方案:
类似于@Birei的改变FS背后的想法是什么?@KarlNordström发布了工作解决方案。。我知道使用
FS
,这是可能的。。只是要把顺序弄对。@KarlNordströ我对所有的消息感到抱歉,我以为你就是那个特工。。抱歉,我不是想给人留下这样的印象。我只是好奇而已。对于一个不太常见(工作)的解决方案来说,将FS从BEGIN块中修改出来是+1。
{
if ($1 ~ /^>/)
printf("\n%s\n", $0)
else
{
print "total number of A - ", gsub(/A/,"A")
print "total number of E - ", gsub(/E/,"E")
}
}