cómo combinar el tiempo de época (por ejemplo, #214235235) y el comando del archivo .bash_history y guardarlo en una línea. Solo debería mostrar el comando con el tiempo de época

cómo combinar el tiempo de época (por ejemplo, #214235235) y el comando del archivo .bash_history y guardarlo en una línea. Solo debería mostrar el comando con el tiempo de época

por ejemplo (archivo .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. esto debe copiarse en otro archivo, por ejemplo (newfile.txt o cualquier archivo nuevo)
  2. el archivo debe ignorar el comando que no tiene tiempo de época
  3. Y deberían ignorar la época del tiempo que no tiene comando.

es decir, la salida del nuevo archivo debería ser así

#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)

Respuesta1

Con sed:

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

Respuesta2

testdataimprimirá sus datos de ejemplo...

$ 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 luego se canalizará awky solo reaccionará si ve una marca de tiempo. Luego, se leerá e imprimirá la siguiente línea con el prefijo de la marca de tiempo vista 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)

información relacionada