como combinar o horário da época (por exemplo, # 214235235) e a vírgula do arquivo .bash_history e salvá-lo em uma linha. Ele deve exibir apenas o comando com o horário da época

como combinar o horário da época (por exemplo, # 214235235) e a vírgula do arquivo .bash_history e salvá-lo em uma linha. Ele deve exibir apenas o comando com o horário da época

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
  1. isso deve ser copiado em outro arquivo, por exemplo (newfile.txt ou qualquer newfile)
  2. o arquivo deve ignorar o comando que não tem época
  3. 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

testdatairá 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 awko 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)

informação relacionada