gpt4 book ai didi

awk - 如何使用 sed 提取两个模式之间的线条并在循环中对其进行后期处理?

转载 作者:行者123 更新时间:2023-12-05 00:54:25 25 4
gpt4 key购买 nike

我想做这样的事情。假设我有以下文字:

Start-pattern  
orange
apple
grape
orange
orange
End-pattern
#######
bla bla bla
########
Start-pattern
orange
apple
grape
apple
orange
End-pattern
#######
bla bla bla
########
Start-pattern
orange
orange
orange
End-pattern
#######
bla bla bla
########

在这里,我想打印每个 Start-pattern 之间有多少橙子、苹果和葡萄。和 End-pattern .

在上面的例子中,我们在第一个开始模式和结束模式之间有 3 个“橙色”、1 个“苹果”和 1 个“葡萄”。第二个SP和EP中的2个“橙色”、2个“苹果”和1个“葡萄”等等。

等待您的宝贵答案。

最佳答案

你可以试试这个awk :

awk '$1 ~ /^Start-pattern$/{p=1;next} $1 ~ /^End-pattern$/{p=0; for (var in a) {print var,a[var];a[var]=""}; print "######"; next} p{a[$1]++}' file

更具可读性 awk :
$1 ~ /^Start-pattern$/ {
p=1;
next
}
$1 ~ /^End-pattern$/ {
p=0;
for (var in a) {
print var,a[var];
a[var]=""
}
print "######";
next
}
p {
a[$1]++;
}

说明:

我们可以拆分这个 awk作为 3 块代码。
  • 检查 Start-pattern模式,然后启用 p=1 .
  • 检查 End-pattern模式,然后禁用 p=0 .然后,打印 a[]与相应的计数。
  • 这将在关联数组中存储这两个模式之间每个项目的出现次数。
  • 关于awk - 如何使用 sed 提取两个模式之间的线条并在循环中对其进行后期处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085313/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com