Shell命令将特定文本从一个文件复制并粘贴到另一个文件?
INPUTFILE
DIRECTOR> TM_6000 Source Load Summary.
DIRECTOR> CIN_1740 Table: [SQ_BOX_CONTROL] (Instance Name: [SQ_BOX_CONTROL])
Output Rows [1], Affected Rows [1], Applied Rows [1345], Rejected Rows [0]
DIRECTOR> TM_6001 Target Load Summary.
DIRECTOR> CIN_1740 Table: [JBOX_CONTROL] (Instance Name: [JBOX_CONTROL])
Output Rows [1], Affected Rows [1], Applied Rows [1340], Rejected Rows [0]
DIRECTOR> TM_6023
===================================================
DIRECTOR> TM_6020 Session [s_m_CONTROL] completed at [Tue Sep 15 02:49:12 2015].
需要以下格式输出
Session : s_m_CONTROL
Source : 1345
Target : 1340
答案 0 :(得分:1)
您没有提供有关如何从输入中提取数据的有用信息。因此,这段代码是一个完整的猜测,但它确实提供了您从给定输入中请求的输出。更改它以处理其他提取要求将相当简单。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my %session;
while (<>) {
if (/Applied Rows \[(\d+)]/) {
if (exists $session{Source}) {
$session{Target} = $1;
} else {
$session{Source} = $1;
}
}
if (/Session \[(\w+)]/) {
$session{Session} = $1;
}
}
for (qw[Session Source Target]) {
say "$_ : $session{$_}";
}
它被编写为Unix过滤器 - 它从STDIN读取并写入STDOUT。因此,如果您的输入数据在一个文件中并且您希望输出在另一个文件中,您可以这样称呼它:
$ ./session_extract < some_input_file > some_output_file
但如果您的输入是来自其他进程的输出并且您希望将输出写入STDOUT,它也会起作用。
$ some_other_process | ./session_extract
(许多其他选项是可用的Unix I / O重定向非常灵活。)
答案 1 :(得分:0)
进行这种操作将是最佳选择。
#! /bin/bash
# Extract session val
session=$(echo $file | grep "Session" | cut -d"[" -f2 | cut -d"]" -f1)
# ...
下一个问题是:源输出线没有差异......必须找到一种解决方法,如找到第一次出现?第二个?