作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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/
我是一名优秀的程序员,十分优秀!