Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash或python分析基于空格/制表符的字符串行_Python_Bash_Parsing_Whitespace - Fatal编程技术网

使用bash或python分析基于空格/制表符的字符串行

使用bash或python分析基于空格/制表符的字符串行,python,bash,parsing,whitespace,Python,Bash,Parsing,Whitespace,我正在使用httpry从我机器上的接口中提取http数据包。它以非常干净的格式输出结果,列之间用空格或制表符分隔。这是输出的一个示例行 2012-11-27 20:29:22 192.168.1.132 74.125.224.51 > GET www.google.com / HTTP/1.1 - - 我正在尝试编写一个脚本(用bash或python)来抓取网站,在本例中是www.google.com,并将它们写

我正在使用httpry从我机器上的接口中提取http数据包。它以非常干净的格式输出结果,列之间用空格或制表符分隔。这是输出的一个示例行

2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -

我正在尝试编写一个脚本(用bash或python)来抓取网站,在本例中是www.google.com,并将它们写入一个文件。将它们写入文件很容易,但我没有任何基于空白或制表符的解析经验。如果有人能为我指明正确的方向,那就太好了。感谢您的帮助。

在我看来,
awk
是这里工作的工具(在bash脚本中):


在我看来,
awk
是这里工作的工具(在bash脚本中):


在Python中,只需对字符串使用split方法

代码

data = "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -"
print data.split()
输出

['2012-11-27', '20:29:22', '192.168.1.132', '74.125.224.51', '>', 'GET', 'www.google.com', '/', 'HTTP/1.1', '-', '-']

在Python中,只需对字符串使用split方法

代码

data = "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -"
print data.split()
输出

['2012-11-27', '20:29:22', '192.168.1.132', '74.125.224.51', '>', 'GET', 'www.google.com', '/', 'HTTP/1.1', '-', '-']
可以在bash中使用“set--”根据空格将字符串拆分为单词。例如:

echo "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -" \
| while read line; do 
    set -- $line;
    N=$#;
    for ((i=0; i<N; i++)); do
        echo "Field $i = '$1'";
        shift;
    done;
  done
要仅提取字段7,请尝试

while read line; do set -- $line; echo "$7"; done
可以在bash中使用“set--”根据空格将字符串拆分为单词。例如:

echo "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -" \
| while read line; do 
    set -- $line;
    N=$#;
    for ((i=0; i<N; i++)); do
        echo "Field $i = '$1'";
        shift;
    done;
  done
要仅提取字段7,请尝试

while read line; do set -- $line; echo "$7"; done

这很好用,但是我不得不把6美元换成7美元。谢谢。抱歉,我将前2个字段计算为1个字段:)。@LandonWO如果解决方案有效,请注意,这非常有效,但是我必须将6美元改为7美元。谢谢。对不起,我把前2个字段算作1个字段:)。@LandonWO如果这个解决方案有效,请告诉我这是一个开始用Python解析的完美方法,谢谢你的回答。@LandonWO不用担心,是的Python在文本解析方面做得非常好。如果您想要更强大的功能,请查看哪里可以使用正则表达式进行拆分。这为我提供了一个用Python开始解析它的完美方法,谢谢您的回答。@LandonWO不用担心,是的,Python在文本解析方面做得非常好。如果您想要更强大的功能,请查看可以通过正则表达式拆分的位置。