2016-09-19 16 views
-3

特定のテキストをコピーして別のファイルに貼り付けるシェルコマンド?特定のテキストをコピーして別のファイルに貼り付けるシェルコマンド

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

ご質問は明確ではありません。最初は、ここではあまり意味がないので、*コピー&ペースト*という意味ではないと思いますが、テキストファイルから情報を抽出します。第2に、私はあなたが* Source *と1340〜* Target *にどのような条件で関連付けるのかを理解していませんが、一般的に、あなたの質問はテキストファイルから特定の情報を抽出するために沸騰します。実際に**シェルプログラミングのみを使用したい場合は、使用するシェルを指定する必要があります(またはシェルがうまくいく場合)。文字列処理の機能はシェルによって大きく異なるためです。 – user1934428

+0

しかし私は個人的にこれをシェル言語でプログラムするのではなく、* awk *、* Ruby *、* Perl *などのテキスト処理に適した言語を使用します。いずれにせよ、あなたがすでに試したことを最初に示して、私たちが議論の基盤を持つようにしてください。 – user1934428

答えて

0

この種の操作を行うと、移動するための方法だろう。

#! /bin/bash 

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

次の問題は次のようなものです:ソース出力ラインには違いがありません...最初に発生したものを見つけ出す必要がありますか?それから二番目?

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に書き込みます。入力データを1つのファイルであり、あなたは別のファイルに出力したいのであれば、あなたはこのようにそれを呼び出します。

$ ./session_extract <some_input_file> some_output_file 

しかし、それはまた、あなたの入力はいくつかの他のプロセスからの出力がある場合に動作し、あなたがしたいです出力はSTDOUTに書き込まれます。

$ some_other_process | ./session_extract 

(他の多くのオプションがavailbable UnixのI/Oリダイレクションは信じられないほど柔軟性があります。)

関連する問題