Chinaunix
标题:
如何处理该文件
[打印本页]
作者:
Ladore
时间:
2015-08-12 11:31
标题:
如何处理该文件
本帖最后由 Ladore 于 2015-08-12 14:29 编辑
现有文件a.txt如下
A B C D E F G
03085810 00015802 9200000000111223445 5.00 14 失败1,ABC [L105303][3.20] IDEABCDEC 111111
03085810 00015802 6666 1111 2222 3333 7.50 14 AS 失败2 [L107859][3.20] IDEABCDEC 222222
03085810 00015802 6666 1111 2222 3333 2.00 11 失败3 [L109317][01] IDEABCDEC 333333
03085810 00015802 6666 1111 2222 3333 398.00 失败4 [11] [ IDEABCDEC 444444
03085810 00015802 6666 1111 2222 3333 0.01 00 成功 [L3][300] IDEABCDEC 555555
复制代码
该文件每列定长,第一行ABCD..不存在,每行第57至84位为E列数据,现需处理该文件使其为以下格式文件:处理过后E列所占的长度不变
03085810 00015802 2200000000111223445 5.00 失败1,ABC IDEABCDEC 111111
03085810 00015802 6666 1111 2222 3333 7.50 AS 失败2 IDEABCDEC 222222
03085810 00015802 6666 1111 2222 3333 2.00 失败3 IDEABCDEC 333333
03085810 00015802 6666 1111 2222 3333 398.00 失败4 IDEABCDEC 444444
03085810 00015802 6666 1111 2222 3333 0.01 成功 IDEABCDEC 555555
复制代码
作者:
ly5066113
时间:
2015-08-12 11:45
回复
1#
Ladore
目测:
sed 's/\[.*]//' file
复制代码
作者:
jason680
时间:
2015-08-12 12:05
回复
1#
Ladore
03085810 00015802 9200000000111223445 5.00
14
失败1
[L105303][3.20]
IDEABCDEC 111111
>> ...每行
第57至84位
为E列数据...
$ awk 'BEGIN{FIELDWIDTHS="
56 27
99"}{sub(/
^[0-9]+ +
/,"",$2);sub(/
.+
/,"",$2);print}' a.txt
03085810 00015802 9200000000111223445 5.00 失败1 IDEABCDEC 111111
03085810 00015802 6666 1111 2222 3333 7.50 失败2 IDEABCDEC 222222
03085810 00015802 6666 1111 2222 3333 2.00 失败3 IDEABCDEC 333333
03085810 00015802 6666 1111 2222 3333 398.00 失败4 IDEABCDEC 444444
03085810 00015802 6666 1111 2222 3333 0.01 成功 IDEABCDEC 555555
作者:
hjfeng1988
时间:
2015-08-12 13:55
awk '{str=substr($0,57,27);sub(/^[0-9]+ +/,"",str);sub(/ .+/,"",str);printf("%s%-27s%s\n",substr($0,0,56),str,substr($0,84))}' file
复制代码
作者:
Ladore
时间:
2015-08-12 14:14
回复
4#
hjfeng1988
谢谢
作者:
Ladore
时间:
2015-08-12 14:59
hjfeng1988 发表于 2015-08-12 13:55
正则表达式中 如果有
14 AS 失败2 [L107859][3.20]
这种字符串,该怎么截取了,谢谢
作者:
hjfeng1988
时间:
2015-08-12 15:10
回复
6#
Ladore
awk '{str=substr($0,57,27);sub(/^[0-9]+ +/,"",str);sub(/ \[.+/,"",str);printf("%s%-27s%s\n",substr($0,0,56),str,substr($0,84))}' file
复制代码
作者:
Ladore
时间:
2015-08-12 16:42
本帖最后由 Ladore 于 2015-08-12 16:42 编辑
回复
3#
jason680
这样写: awk 'BEGIN{FIELDWIDTHS="56 28 99"}{sub(/^[0-9]+ +/,"",$2);sub(/ \[.+/,"",$2);print}' a.txt 就不会是定长的了
03085810 00015802 9200000000111223445 5.00 失败1,ABC IDEABCDEC 111111
03085810 00015802 6666 1111 2222 3333 7.50 AS 失败2 IDEABCDEC 222222
03085810 00015802 6666 1111 2222 3333 2.00 失败3 IDEABCDEC 333333
03085810 00015802 6666 1111 2222 3333 398.00 失败4 IDEABCDEC 444444
03085810 00015802 6666 1111 2222 3333 0.01 成功 IDEABCDEC 555555
复制代码
该问题已经解决,谢谢大家!
作者:
jason680
时间:
2015-08-12 16:47
回复
8#
Ladore
printf
or
sprintf
can work fine
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2