Shell命令将特定文本从一个文件复制并粘贴到另一个文件

时间:2016-09-19 08:00:26

标签: perl shell awk

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

2 个答案:

答案 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)
# ...

下一个问题是:源输出线没有差异......必须找到一种解决方法,如找到第一次出现?第二个?