UNIX shell脚本只需要从具有下一行的某些标准的文件内容需要行来考虑
帮助。。。。。。。仍然不起作用 我有一个包含字符串的文件:UNIX shell脚本只需要从具有下一行的某些标准的文件内容需要行来考虑,unix,sed,awk,grep,sh,Unix,Sed,Awk,Grep,Sh,帮助。。。。。。。仍然不起作用 我有一个包含字符串的文件: http://mediafire.com/?a6o37kfc7m68dri 部分内容: 我的方案是,我想创建一个.sh脚本,该脚本将从文件中获取所需的所有字符串,并将其格式化如下,最后将其输出到一个新文件: 编辑 其中: 第1列:BIF在setInputTag>设置输入标记值,名称/值:科目号/1729030 第2列:BIF在setInputTag>设置输入标签值,名称/值:票据参考号/192840714 第3列:BIF在setI
http://mediafire.com/?a6o37kfc7m68dri
部分内容:
我的方案是,我想创建一个.sh脚本,该脚本将从文件中获取所需的所有字符串,并将其格式化如下,最后将其输出到一个新文件:
编辑
其中:
- 第1列:
1729030BIF在setInputTag>设置输入标记值,名称/值:科目号/
- 第2列:
192840714BIF在setInputTag>设置输入标签值,名称/值:票据参考号/
- 第3列:
1BIF在setInputTag>设置输入标签值时,名称/值:bill\u ref\u resets/
- 第4列:
1422errcode=
- 第5列:
执行OCI函数时出错未使用:errtext=
egrep -e 'ACCOUNT_NO|bill_ref_no|bill_ref_resets|errcode|errtext' logs.txt | awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=4 a=0 s='errtext'
(同上:分成一条线)-运行时,将其放入一条线:
egrep -e 'ACCOUNT_NO|bill_ref_no|bill_ref_resets|errcode|errtext' logs.txt
|awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}'
b=4 a=0 s='errtext'
编辑
将这行代码添加到以前的代码后:
| sed -e 's/=/:/' -e 's/^BIF.*://' -e 's=/=:=' -e 's/^ *//' -e 's/ *: /:/' | sed -e 's/ACCOUNT_NO://g' -e 's/bill_ref_no:/|/g' -e 's/bill_ref_resets:/|/g' -e 's/errcode:/|/g' -e 's/errtext:/|/g'
这是我现在的输出:
现在的最后一个问题是如何修剪换行符以获得下面的输出
它尝试添加此代码,但不起作用:
| sed -e 's/\n//g;'
如何修剪那些新线条
所需输出为:
我的全部代码现在:
请试试这个
egrep -e 'ACCOUNT_NO|bill_ref_no|bill_ref_resets|errcode|(Error in execution)'
logs.txt
|
grep -B4 'Error in execution'
|
sed -e 's/ACCOUNT_NO\/\(.*\)/\1|/' -e 's/.*bill_ref_no\/\(.*\)/\1|/' -e 's/.*bill_ref_resets\/\(.*\)/\1|/' -e 's/.*errcode.*= \(.*\)/\1|/'
-e 's/.*errtext.*= \(.*\)/\1/' -e '/--/d'
| tr -d '\n' | sed -e 's/:/:\n/g' -e 's/ |/|/g'
> out_put_file.txt
我用bash开发了Ubuntu 12.10。这太长了,所以我把它分成几行,当你运行它的时候,你需要把它们放在一行。StackOverflow还存在一些格式问题。我需要编辑它以显示完整的命令行
这是我的输出
1729030|192840714|1|1422|Error in execution of OCI function unused:
1746056|202085235|1|1422|Error in execution of OCI function unused:
809434|201632617|1|1422|Error in execution of OCI function unused:
6993375|202888775|1|1422|Error in execution of OCI function unused:
7453294|199851665|1|1422|Error in execution of OCI function unused:
根据给定的logs.txt,原始输出的第二行似乎是错误的。仅一个awk命令即可:
#!/usr/bin/awk -f
{
if (/ACCOUNT_NO/) {
sub(/.*\//, "")
account_no = $NF
step = 2
} else if (/bill_ref_no/) {
if (step++ == 2) {
sub(/.*\//, "")
bill_ref_no = $NF
} else {
step = 1
}
} else if (/bill_ref_resets/) {
if (step++ == 3) {
sub(/.*\//, "")
bill_ref_resets = $NF
} else {
step = 1
}
} else if (/errcode/) {
if (step++ == 4) {
sub(/.* = /, "")
errcode = $0
} else {
step = 1
}
} else if (/errtext/) {
if (step == 5) {
sub(/.* = /, "")
print account_no "|" bill_ref_no "|" bill_ref_resets "|" errcode "|" $0
}
step = 1
}
}
运行方式:
awk -f script.awk log.txt
基于上述输入的输出:
1746056|202085235|1|1422|Error in execution of OCI function unused:
sed-n-e'/value:ACCOUNT\u NO/{n;n;s/.\n\(.\)/\1/g;p;}'logs.txt>output\u logs.out
这是我们迄今为止尝试的。。。但这并不是新的情况。我是一个全新的shell脚本编写者。。。请给我一些帮助。@user2775189这些值是否仅显示在一行中?我的意思是如果所有这些值都可以在源文件的一行中找到。能否显示源文件中包含完整数据集的部分?部分内容请参考编辑后的问题thanksHi@konsolebox请参考编辑后的帖子。。。感谢运行uname-a
或运行echo$HOSTNAME
egrep:cannotopenlogs.txt
grep:inally option--B
grep:inally option--4
用法:grep[-E |-F][-c |-l |-q][-bhinsvwx]-E模式列表。。。[-f pattern|u file…][file…]用法:grep[-E|-f][-c|-l|-q][-bhinsvwx][E pattern_list…]-f pattern|u file。。。[文件…][/code>用法:grep[-E |-F][-c |-l |-q][-bhinsvwx]模式[文件…][/code>uname-a
B.11.23 U ia64 1103159669无限制用户许可第一个错误表示您的logs.txt
不在当前文件夹中。对于第二个错误,只需将grep
替换为egrep
egrep:inally选项--B
用法:egrep[-c |-l |-q][bhinsvwx]-e模式列表代码>[-f pattern_file…][file…]`用法:egrep[-c |-l |-q][-bhinsvwx][-e pattern_list…]-f pattern_file。。。[file…]
用法:egrep[-c |-l |-q][-bhinsvwx]模式[file…]
语法错误源代码行是3。
错误上下文是
awk:Quitting
源代码行是3。
@user2775189我再次测试了脚本,它运行良好。也许这取决于你的awk?你确定你复制的很好吗?@konslebox关于awk有兼容性问题吗?因为我又试了一次,结果又犯了一个错误,和我之前的评论一样。。。。怎么了?HP-UX是server@user2775189我也用其他awk变体测试了它,它对我来说效果很好。
egrep -e 'ACCOUNT_NO|bill_ref_no|bill_ref_resets|errcode|(Error in execution)'
logs.txt
|
grep -B4 'Error in execution'
|
sed -e 's/ACCOUNT_NO\/\(.*\)/\1|/' -e 's/.*bill_ref_no\/\(.*\)/\1|/' -e 's/.*bill_ref_resets\/\(.*\)/\1|/' -e 's/.*errcode.*= \(.*\)/\1|/'
-e 's/.*errtext.*= \(.*\)/\1/' -e '/--/d'
| tr -d '\n' | sed -e 's/:/:\n/g' -e 's/ |/|/g'
> out_put_file.txt
1729030|192840714|1|1422|Error in execution of OCI function unused:
1746056|202085235|1|1422|Error in execution of OCI function unused:
809434|201632617|1|1422|Error in execution of OCI function unused:
6993375|202888775|1|1422|Error in execution of OCI function unused:
7453294|199851665|1|1422|Error in execution of OCI function unused:
#!/usr/bin/awk -f
{
if (/ACCOUNT_NO/) {
sub(/.*\//, "")
account_no = $NF
step = 2
} else if (/bill_ref_no/) {
if (step++ == 2) {
sub(/.*\//, "")
bill_ref_no = $NF
} else {
step = 1
}
} else if (/bill_ref_resets/) {
if (step++ == 3) {
sub(/.*\//, "")
bill_ref_resets = $NF
} else {
step = 1
}
} else if (/errcode/) {
if (step++ == 4) {
sub(/.* = /, "")
errcode = $0
} else {
step = 1
}
} else if (/errtext/) {
if (step == 5) {
sub(/.* = /, "")
print account_no "|" bill_ref_no "|" bill_ref_resets "|" errcode "|" $0
}
step = 1
}
}
awk -f script.awk log.txt
1746056|202085235|1|1422|Error in execution of OCI function unused: