如何从tail和awk文件中获取数据

时间:2013-11-28 18:13:34

标签: linux awk tail

我有一个文件,我想从中获取一些数据。 我运行GNU / Linux。

文件: http://pastebin.com/AXF4SJAm

我运行此命令以获取数据:

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

通缉输出:

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

但我得到了这个: [~100.0%] /home/gustaf/.cache/mozilla/firefox/mwad0hks.default/startupCache / ... [2K

如何获得desiand结果?

更多详情:

为了生成文件,我使用以下命令:avgscan --heur / home / gustaf> scan.txt

并且在运行期间我尝试了两种具有相同结果的解决方案:

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

我在python脚本中使用了scan.txt。

3 个答案:

答案 0 :(得分:1)

管道错了。它应该是:

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

您不需要s.txt

答案 1 :(得分:1)

您也可以尝试

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

但输出在我的gnome-terminal上不可见(由于文本末尾的终端转义码,我认为......)

如果删除最后一部分(点和转义码),您可以在终端上获得可见输出。

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

产生

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

答案 2 :(得分: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)

新解决方案存在一些小缺陷,但效果令人满意。