+ -
当前位置:首页 → 问答吧 → 求得到文本里的字段信息的思路。头都搞大了。

求得到文本里的字段信息的思路。头都搞大了。

时间:2011-10-06

来源:互联网


  我在ROS里用 linux 下的 script 进行操作。


  一个文本文件,内容如下:

到期日期姓名 地址 电话 带宽 账号 密码
======== ====== ========= =========== ========= =========== ===========
20111010 王大夫 1单元402 13999393998 4M 15809918400 1234567890
20120601 刘伟 2单元401 6922171 4M 15809918816 09876655
22 刘3 1单元202 tel 1M 1 1
33 33 33 33 1M 33 33




这个文本中间的空格 全部是用 TAB 或 空格产生的

而且最后一行后面 有可能 还有很多 的 回车换行符,在Emeditor 里显示如下:






我想得到 这四行 的 每个字段的内容 (不包括空格 和 TAB 产生的间隔), 而且 因回车换行符产生的 行也不采集。


  给个思路吧。


谢谢。

作者: ww111222   发布时间: 2011-10-06

这个主要是shell中的文本解析,大致思路:
用while循环读取文件,遇到空行(单独回车或是只有空白字符,这需要一个
简单的正则表达式进行匹配)就continue再读取一行;遇到“标题栏及=====”等这些行也
continue,再读取一行。对于记录行,然后就是打印各个字段,可以用cut分割(这里它
需要压缩多个空格或制表符为一个)、当然也可以以使用awk。
写了个,参考下:
Python code

#!/bin/bash
# parse.sh

# Usage: parse.sh <input-file>

EXIT_SUCCESS=0
EXIT_FAILURE=1
E_BADARG=2

if [ $# -ne 1 ]; then
    echo "Usage: parse.sh <input-file>" >&2
    exit $E_BADARG
fi

file2read="$1"

deadline=
name=
address=
tel=
broadband=
account=
passwd=
counter=1
declare -a line_item
while read line
do
    if `echo "$line" | grep -q -E '^\\s*$'`; then
        continue
    elif `echo "$line" | grep -q -E '^\\s*到期日期\\s*姓名\\s*地址\\s*电话\\s*带宽\\s*账号\\s*密码\\s*$'`; then
        continue
    elif `echo "$line" | grep -q -E '^\\s*=+\\s*=+.*$'`; then
        continue
    else
        deadline=`echo "$line" | awk '{print $1}'`
        name=`echo "$line" | awk '{print $2}'`
        address=`echo "$line" | awk '{print $3}'`
        tel=`echo "$line" | awk '{print $4}'`
        broadband=`echo "$line" | awk '{print $5}'`
        account=`echo "$line" | awk '{print $6}'`
        passwd=`echo "$line" | awk '{print $7}'`
        echo "第$counter条记录如下:"
        echo -e "$deadline $name $address $tel $broadband $account $passwd\n"
        ((++counter))
    fi
done < "$file2read"
exit $EXIT_SUCCESS


Output:
第1条记录如下:
20111010 王大夫 1单元402 13999393998 4M 15809918400 1234567890

第2条记录如下:
20120601 刘伟 2单元401 6922171 4M 15809918816 09876655

第3条记录如下:
22 刘3 1单元202 tel 1M 1 1

第4条记录如下:
33 33 33 33 1M 33 33

作者: dengxiayehu   发布时间: 2011-10-06