Shell命令将特定文本从一个文件复制并粘贴到另一个文件
问题描述:
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
答
做这种操作的输出将是要走的路。
#! /bin/bash
# Extract session val
session=$(echo $file | grep "Session" | cut -d"[" -f2 | cut -d"]" -f1)
# ...
下一个问题是:源OU输出线没有区别...不得不四处找路一样,找到第一次出现?那么第二?
答
您没有提供有关如何从输入中提取数据的有用信息。所以这个代码是一个完整的猜测,但它确实给出了你从给定输入中要求的输出。将其改为处理其他提取要求将是相当简单的。
#!/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重定向是非常灵活的。)
你的问题不明确。首先,我不认为你的意思是*复制和粘贴*,因为这个术语在这里没有多大意义,但是*从文本文件中提取信息*。其次,我不明白你在什么条件下把1345与* Source *和1340与* Target *联系起来,但是一般来说,你的问题归结为从文本文件中提取某些信息。如果你真的希望**只使用shell编程,那么你需要指定你想使用哪个shell(或者如果任何shell会好的话),因为字符串处理的能力在不同的shell之间变化很大。 – user1934428
然而,我个人不会用shell语言编写这个程序,而是使用一种更适合文本处理的语言,比如* awk *,* Ruby *或* Perl * - 等等。无论如何,首先展示你已经尝试过的东西,以便我们有讨论的基础。 – user1934428