我有一个文本文件,文件包含日志,问题是所有日志都在单行中,我必须使用python或shell脚本在单独的行中打破日志。
我没有办法如何做到这一点。
示例文件内容:
2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs 2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001SYSU&&SYSTEM_RESET_RFC_SERVER itzpiascs 2AUK20170407000007002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
答案 0 :(得分:2)
如果我弄错了,你需要一个包含4列数据的文件。使用awk
,解决方案将如下所示:
awk '{for (i=0; i<NF/4; i++) print $(i*4+1)" "$(i*4+2)" "$(i*4+3)" "$(i*4+4)}' file.txt
输出:
2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001SYSU&&SYSTEM_RESET_RFC_SERVER itzpiascs
2AUK20170407000007002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
答案 1 :(得分:1)
您可以在python中使用re(正则表达式)库来完成此任务。这将用新的换行符替换文本中的任何空格。
import re
with open('yourfile.txt') as f:
print(re.sub(r'\s+', '\n', f.read()))
如果您想进行更复杂的操作,可以使用re.split
来获取字符串列表。
答案 2 :(得分:1)
新线应该从2AUK开始 - Nikhil.J
Python 解决方案(在Python 3.5上测试):
import re
with open('log.txt', 'r') as f:
contents = re.sub(r'(?<!^)2AUK', '\n2AUK', re.sub(r'\s{2,}', ' ', f.read().strip()))
print(contents)
替代 sed 方法:
sed 's/[[:blank:]][[:blank:]]*/ /g; s/\<2AUK/\n&/g' file
输出:
2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001SYSU&&SYSTEM_RESET_RFC_SERVER itzpiascs
2AUK20170407000007002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
s/[[:blank:]][[:blank:]]*/ /g
- 抑制空间过多
s/\<2AUK/\n&/g
- 为每个2AUK
添加换行符以获取单独的行
答案 3 :(得分:1)
根据您的数据,您的个人日志条目似乎以ScaleTransform
结尾,因此请暂停:
itzpiascs
您的文件将变为:
sed -i -r $'s/itzpiascs\\s+/itzpiascs\\\n/g' your_file.log
您可以删除2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
2AUK20170407000006002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001SYSU&&SYSTEM_RESET_RFC_SERVER itzpiascs
2AUK20170407000007002840700014DeitzpiascECCSERVICE1 SAPMSSY1 3001ZRFC_ICICI&&ZRFC_ICICI itzpiascs
参数,不要更改文件,或者更改-i
之类的内容,以便在更改之前创建原始文件的备份。
编辑:如果你想删除多余的空格,你可以链接另一个替换:
-i.bak
将文件转到:
sed -i -r $'s/\\s+/ /g; s/itzpiascs\\s+/itzpiascs\\\n/g' your_file.log