/ Polecenie / Shell do kopiowania i wklejania określonego tekstu z jednego pliku do innego - perl, shell, awk

Polecenie powłoki do kopiowania i wklejania określonego tekstu z jednego pliku do innego - perl, shell, awk

Polecenie powłoki do kopiowania i wklejania określonego tekstu z jednego pliku do drugiego?

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].

Potrzebujesz wyjścia w poniższym formacie

Session : s_m_CONTROL
Source : 1345
Target : 1340

Odpowiedzi:

1 dla odpowiedzi № 1

Nie podajesz żadnych przydatnych informacji o tym, jak chceszwyodrębnić dane z twojego wejścia. Więc ten kod jest kompletnym odgadnięciem, ale daje dane wyjściowe, o które prosiłeś z danych wejściowych. I będzie to dość proste, aby zmienić go, aby sprostać innym wymaganiom ekstrakcji.

#!/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{$_}";
}

Jest napisany jako filtr Unix - czyta z STDIN i zapisuje do STDOUT. Jeśli więc twoje dane wejściowe znajdują się w jednym pliku i chcesz, aby dane wyjściowe były w innym pliku, nazwałbyś to tak:

$ ./session_extract < some_input_file > some_output_file

Ale działa również, jeśli twoje wejście jest wyjściem z innego procesu i chcesz, aby dane wyjściowe były zapisywane w STDOUT.

$ some_other_process | ./session_extract

(Dostępnych jest wiele innych opcji Przekierowanie we / wy Unix jest niezwykle elastyczne.)


0 dla odpowiedzi nr 2

Takie postępowanie byłoby dobrym rozwiązaniem.

#! /bin/bash

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

Następny problem to: Linie wyjściowe źródła nie mają żadnych różnic ... Musisz znaleźć sposób na znalezienie, pierwsze wystąpienie? Potem drugi?