gpt4 book ai didi

Linux 脚本 : Using perl to insert record using If-Else condition

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:31 24 4
gpt4 key购买 nike

我正在使用 Linux bash 脚本,并尝试使用 perl 根据文件中存在的特定值在数据文件中插入记录。

示例:我有一个包含记录的数据文件:00、50、51 和 52。

00 714
50OSDK10026-326455 NCIBLEX
51PO PO456
52GRW000000003200000
00 148
50OSDK15432-156831 HCIBLEX
51PO PO123
52GRW000000001500000
00 577
50OSDK19932-157431 SCIBLEX
51PO PO899
52GRW000000001500000

记录 50 中的位置 #21 分别包含值:N、H 和 S。如果值 = H,那么我想在记录 00 上方插入记录“##”,值为:945,否则我想在记录 00 上方插入记录“##”,值为:944。所以最终文件应该看起来像这样:

## 944
00 714
50OSDK10026-326455 NCIBLEX
51PO PO456
52GRW000000003200000
## 945
00 148
50OSDK15432-156831 HCIBLEX
51PO PO123
52GRW000000001500000
## 944
00 577
50OSDK19932-157431 SCIBLEX
51PO PO899
52GRW000000001500000

我可以使用 perl 在“00”记录上方插入“##”记录,如下所示:

perl -i -pnle "print '## 944' if(/^00/);" datafile

但是,我不知道如何检查记录中的 pos: 21:50,然后在 perl 命令中使用该值来打印“## 944”或“## 945”。

有人可以帮忙吗?

感谢您的帮助。

最佳答案

也许以下内容会有所帮助:

use strict;
use warnings;

local $/ = '00 ';

while (<>) {
chomp;
my @arr = split /\n/ or next;
$arr[0] = $/ . $arr[0];

my $rec = ( substr $arr[1], 20, 1 ) eq 'H' ? '## 944' : '## 945';
print +( join "\n", $rec, @arr ), "\n";
}

用法:perl script.pl inFile [>outFile]

最后一个可选参数将输出定向到文件。

脚本读取由 '00 ' 分隔的记录,并将 block 拆分到一个数组中。然后它使用 substr 检查 50 条记录的第 21 个字符,并使用三元运算符返回保存在 $rec 中的评估结果。最后,打印数组元素和 $rec

关于Linux 脚本 : Using perl to insert record using If-Else condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875675/

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