как объединить время эпохи (например, #214235235) и команду из файла .bash_history и сохранить их в одной строке. Она должна отображать только команду с временем эпохи

как объединить время эпохи (например, #214235235) и команду из файла .bash_history и сохранить их в одной строке. Она должна отображать только команду с временем эпохи

например (файл .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. это следует скопировать в другой файл, например (newfile.txt или любой новый файл)
  2. файл должен игнорировать команду, которая не имеет времени эпохи
  3. и следует игнорировать эпоху времени, которая не имеет команды

т.е. newfile Вывод должен быть таким

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

решение1

С sed:

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

решение2

testdataраспечатает ваши данные примера...

$ 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
}

...который затем будет передан по конвейеру awk, который реагирует только при виде временной метки. Затем следующая строка будет прочитана и напечатана с префиксом временной метки, увиденной ранее:

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

Связанный контент