So kombinieren Sie die Epochenzeit (z. B. Nr. 214235235) und den Befehl aus der Datei .bash_history und speichern sie in einer Zeile. Es sollten nur Befehle mit Epochenzeit angezeigt werden

So kombinieren Sie die Epochenzeit (z. B. Nr. 214235235) und den Befehl aus der Datei .bash_history und speichern sie in einer Zeile. Es sollten nur Befehle mit Epochenzeit angezeigt werden

zB (.bash_history-Datei)

cd Fortigate_Report/
ll
exit
#1512031841
history>set1
#1512031849
history>set2
#1512031864
vi comm -23 <(sort set1) <(sort set2)
#1512031877
comm -23 <(sort set1) <(sort set2)
#1512031892
comm -23 <(sort set2) <(sort set1)
#1512031971
  1. Dies sollte beispielsweise in eine andere Datei kopiert werden (newfile.txt oder eine beliebige neue Datei).
  2. Die Datei sollte den Befehl ignorieren, der keine Epochenzeit hat
  3. und die Epochenzeit sollte ignoriert werden, die keinen Befehl hat

ie newfile Die Ausgabe sollte so aussehen

#1512031841 history>set1 
#1512031849 history>set2
#1512031864 vi comm -23 <(sort set1) <(sort set2)
#1512031877 comm -23 <(sort set1) <(sort set2)
#1512031892 comm -23 <(sort set2) <(sort set1)

Antwort1

Mit sed:

sed -n '/^#[0-9]\{1,\}$/N;s/\n/ /p' < file > newfile

Antwort2

testdatadruckt Ihre Beispieldaten ...

$ testdata() { cat<<dog                        
cd Fortigate_Report/
ll
exit
#1512031841
history>set1
#1512031849
history>set2
#1512031864
vi comm -23 <(sort set1) <(sort set2)
#1512031877
comm -23 <(sort set1) <(sort set2)
#1512031892
comm -23 <(sort set2) <(sort set1)
#1512031971
dog
}

...das dann weitergeleitet wird, awkreagiert nur, wenn ein Zeitstempel angezeigt wird. Dann wird die nächste Zeile gelesen und mit dem zuvor angezeigten Zeitstempel als Präfix gedruckt:

$ testdata | awk '/^#/ && (getline L) > 0 { print $0, L }'
#1512031841 history>set1
#1512031849 history>set2
#1512031864 vi comm -23 <(sort set1) <(sort set2)
#1512031877 comm -23 <(sort set1) <(sort set2)
#1512031892 comm -23 <(sort set2) <(sort set1)

verwandte Informationen