2016-09-19 176 views
-3

Shell命令将特定文本从一个文件复制并粘贴到另一个文件?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

你的问题不明确。首先,我不认为你的意思是*复制和粘贴*,因为这个术语在这里没有多大意义,但是*从文本文件中提取信息*。其次,我不明白你在什么条件下把1345与* Source *和1340与* Target *联系起来,但是一般来说,你的问题归结为从文本文件中提取某些信息。如果你真的希望**只使用shell编程,那么你需要指定你想使用哪个shell(或者如果任何shell会好的话),因为字符串处理的能力在不同的shell之间变化很大。 – user1934428

+0

然而,我个人不会用shell语言编写这个程序,而是使用一种更适合文本处理的语言,比如* awk *,* Ruby *或* Perl * - 等等。无论如何,首先展示你已经尝试过的东西,以便我们有讨论的基础。 – user1934428

回答

0

做这种操作的输出将是要走的路。

#! /bin/bash 

# Extract session val 
session=$(echo $file | grep "Session" | cut -d"[" -f2 | cut -d"]" -f1) 
# ... 

下一个问题是:源OU输出线没有区别...不得不四处找路一样,找到第一次出现?那么第二?

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 

(许多其他选项availbable Unix的I/O重定向是非常灵活的。)

相关问题