gpt4 book ai didi

bash - 对文本部分进行排序(unix/shell)

转载 作者:行者123 更新时间:2023-12-04 04:47:46 26 4
gpt4 key购买 nike

我有一些数据集( foo )和 barbaz作为部分的输出。带有 baz 的部分应该排序在输出的顶部。

示例输入;

= foo4 =
bar
(..)
barN
= foo1 =
bar
(..)
barN
= foo5 =
bar
(..)
barN
baz
= foo2 =
bar
(..)
barN
= foo3 =
bar
(..)
barN
baz

在上面的例子中,我想要部分 = foo3 == foo5 =移动到输出的顶部,并按“名称”部分对列表进行子排序,即。
= foo3 =
= foo5 =
= foo1 =
= foo2 =
= foo4 =

但该部分的内容完好无损。

最佳答案

Perl 解决方案。它使用节的散列,键是节的名称,值包含节在文件中的位置以及是否baz的信息。在场。一旦文件被读入散列,键被排序并打印内容,按照记住的方式在文件中移动。

#!/usr/bin/perl
use warnings;
use strict;

my $file = shift;

my $start = qr/^= (.*) =$/;

open my $FH, '<', $file or die $!;

my %sections;
my $current_section;
while (<$FH>) {
if (/$start/) {
$current_section = $1;
$sections{$current_section}{begin} = tell $FH;
} elsif (/baz/) {
$sections{$current_section}{baz} = 1;
}
}

for my $section (map substr( $_, 1),
sort map { ($sections{$_}{baz} ? '0' : '1') . $_ }
keys %sections) {
seek $FH, $sections{$section}{begin}, 0;
print "= $section =\n";
while (<$FH>) {
last if /$start/;
print;
}
}

关于bash - 对文本部分进行排序(unix/shell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923470/

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