%20und%20den%20Befehl%20aus%20der%20Datei%20.bash_history%20und%20speichern%20sie%20in%20einer%20Zeile.%20Es%20sollten%20nur%20Befehle%20mit%20Epochenzeit%20angezeigt%20werden.png)
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
- Dies sollte beispielsweise in eine andere Datei kopiert werden (newfile.txt oder eine beliebige neue Datei).
- Die Datei sollte den Befehl ignorieren, der keine Epochenzeit hat
- 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
testdata
druckt 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, awk
reagiert 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)