%20e%20a%20v%C3%ADrgula%20do%20arquivo%20.bash_history%20e%20salv%C3%A1-lo%20em%20uma%20linha.%20Ele%20deve%20exibir%20apenas%20o%20comando%20com%20o%20hor%C3%A1rio%20da%20%C3%A9poca.png)
por exemplo (arquivo .bash_history)
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
- isso deve ser copiado em outro arquivo, por exemplo (newfile.txt ou qualquer newfile)
- o arquivo deve ignorar o comando que não tem época
- e deve ignorar o horário da época que não tem comando
ou seja, a saída do novo arquivo deve ser assim
#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)
Responder1
Com sed
:
sed -n '/^#[0-9]\{1,\}$/N;s/\n/ /p' < file > newfile
Responder2
testdata
irá imprimir seus dados de exemplo ...
$ 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
}
... que então será canalizado para awk
o qual só reage se for visto um carimbo de data / hora. Então a próxima linha será lida e impressa prefixada com o timestamp visto antes:
$ 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)