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 № 1Nie 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?