2014-04-05 2 views
1

Я хочу извлечь временную метку пакетов с помощью tcpdump и поместить их в файл таким образом, что последняя временная метка заменяет первую строку (которая либо пуста, либо содержит отметка времени второго последнего пакета). Необходимо, чтобы файл имел только 1 строку, т. Е. отметка времени последнего пакета.Сценарий Bash, который заменит только первую строку

Это то, что я сделал:

sudo tcpdump -i eth0 -l | cut -d . -f1 > test.txt 

cat test.txt 
16:08:04 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 

Но то, что я хочу, это только последняя метка времени:

cat test.txt 
16:08:05 

Любые идеи?

ответ

2

Из того, что я протестировал, похоже, что ваш скрипт будет работать вечно, и вам может понадобиться увидеть последний пакет в другом процессе, не так ли?

$ cat test.txt 

16:08:04 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 

Если вы хотите только последний пакет (т.е. последняя строка), пожалуйста, попробуйте

$ tail -1 test.txt 

16:08:05 

, если вы хотите, чтобы увидеть последний пакет вместе с остальными, пожалуйста, попробуйте

$ tail -1 test.txt > tmp_out; cat test.txt >> tmp_out; cat tmp_out 

16:08:05 
16:08:04 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
16:08:05 
+0

не то, что я ищу. Я собираю вывод файла tcpdump в файл, но я хочу, чтобы он заменил первую строку последней меткой времени (это потому, что у меня есть ограничения по пространству). – user3465593

+0

замените первую строку - это не то, о чем спрашивает ваш вопрос. Обновите свой пост. – suspectus

+0

Отредактированный вопрос. Надеюсь, его достаточно ясно. – user3465593

0

Использование AWK вы можете сделать:

sudo tcpdump -i en0 -l -c 5 2>/dev/null | awk -F'\\.' '$1~/^[012][0-9]:/{p=$1} 
    END{print p > "output"}' 

cat output 
08:27:51 

Это позволит получить максимальную временную метку и сохранить ее в файле с именем output.

Смежные вопросы