2013-11-28 1 views
0

У меня есть файл, из которого я хочу получить некоторые данные. Я запускаю GNU/Linux.Как получить данные из файла с хвостом и awk

Файл: http://pastebin.com/AXF4SJAm

Я выполнения этой команды для получения данных:

tail -n 1 scan.txt > s.txt | awk '/%/ { print $2 }' s.txt 

Wanted выход:

/home/gustaf/.cache/mozilla/firefox/mwad0hks.default/startupCache/...[2K 

Но я вместо этого: [~ 100,0%] /home/gustaf/.cache/mozilla/firefox/mwad0hks.default/startupCache/...[2K

Как мне сделать, чтобы получить результат desiand?

Подробнее:

Для создания файла, я с помощью этой команды: avgscan --heur/дома/Густав> scan.txt

и во время бега я пробовал оба решения с тот же результат:

/home/gustaf/.mozilla/firefox/mwad0hks.default/ghostery/patterns-...[2K 
[~5.1%] 

И я использую scan.txt в скрипте python.

+0

Работает для меня. Что ты нам не показываешь? –

+0

У меня проблема с выводами escape-символов в данном файле http://pastebin.com/AXF4SJAm –

ответ

0

Я решил эту проблему.

До:

cmd = "awk '{ arg=$2 } END {sub(/\.\..*$/,arg); print arg}' scan.txt" 
x = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 
AvgAPI.lastscanned = x.stdout.read() 

Сейчас:

Line_len = 1200 
SEEK_END = 2 
file = open('scan.txt', "r") 
file.seek(-Line_len, SEEK_END) 
data_scanfile_not_cleaned = str(file.read(Line_len)).split(" ")[1].strip() 
if not data_scanfile_not_cleaned.startswith('/'): 
    file.close() 
    AvgAPI.lastscanned = "" 
    time.sleep(0.1) 
else: 
    data_scanfile_re = re.sub(r'[~\s+(\d+)%]','',data_scanfile_not_cleaned) 
    data_scanfile_strip = data_scanfile_re.strip("[.]") 
    data_scanfile = data_scanfile_strip.strip("[K") 
    AvgAPI.lastscanned = data_scanfile 
    file.close() 
    time.sleep(0.1) 

Есть некоторые незначительные недостатки с новым решением, но она работает удовлетворительно.

1

Труба неправильная. Оно должно быть:

tail -n 1 scan.txt | awk '/%/ { print $2 }' 

Вам не нужно s.txt

1

Вы также можете попробовать

awk '{ arg=$2 } END {print arg}' scan.txt 

но выход не виден на мой гном-терминал (в связи с терминальными кодов эвакуации в конец текста, я думаю ..)

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

awk '{ arg=$2 } END {sub(/\.\..*$/,"",arg); print arg}' scan.txt 

производит

/home/gustaf/.cache/mozilla/firefox/mwad0hks.default/startupCache/ 
+0

Вывод из моего приложения, когда я использую ваше решение: /home/gustafh/.mozilla/firefox/mwad0hks.default/cookies.sqlite:/c70 –

+0

Можете ли вы проверить, что мы используем один и тот же файл ввода? Я получаю последнюю строку в файле, который вы указали в http: // pastebin.com/AXF4SJAm является '/home/gustaf/.cache/mozilla/firefox/mwad0hks.default/startupCache/... [2K' –