#! /bin/ksh
awk -F':' '{
if(match($0,":server:APBS"))
{
print x;
x=$0;
}
}' iws_config4.dat
0
A
回答
5
您在本地awk
编写程序为:
awk -F':' '/:server:APBS/ { print x; x=$0; }' iws_config4.dat
的awk
程序由图案和采取的行动时,这些模式相匹配。你写的无异于滥用awk
的内置设施。
鉴于您只对$0
感兴趣,字段分隔符是多余的,所以-F':'
参数可以继续。
你的程序在做什么是:
- 读取一行。
- ,如果它的模式
- 打印匹配
- 保存当前行
因此,如果您输入包含一个比赛,你看不到任何输出的最后一行匹配(或者,更确切地说,是一条空白线)。如果你的输入包含两个匹配,你会看到第一个;如果三个,前两个;等等。
考虑效仿 'grep -B1 :server:APBS iws_config4.dat
' 的愿望,你可以这样做:
awk '/:server:APBS/ { print old }
{ old = $0 }' iws_config4.dat
如果线路匹配,打印旧保存的线。 无论如何,将当前行存储为(新)旧保存的行。
它可能都可以平铺到一条线上。模式匹配在无条件保存之前至关重要。
考虑中的脚本k.awk
和数据文件iws_config4.dat
,我得到我所期望的输出。你得到了什么?你能指望什么?
$ cat iws_config4.dat
One line of text followed by the marker
:server:APBS blah blah bah 1
:server:APBS blah blah bah 2
More text
Blah blah blah
$ cat k.awk
awk '/:server:APBS/ { print old }
{ old = $0 }' iws_config4.dat
$ sh k.awk
One line of text followed by the marker
:server:APBS blah blah bah 1
$
如果空行可能是麻烦,仅保存非空白行:
awk '/:server:APBS/ { print old }
/[^ ]/ { old = $0 }' iws_config4.dat
第二行现在是唯一的活性上含有至少一个非空字符行,所以只有这些行会被保存。
相关问题
- 1. 为什么这个代码不工作?
- 2. 为什么这个代码不工作?
- 3. 为什么这个代码不工作?
- 4. 为什么这个代码不工作
- 5. 为什么这段代码不工作?
- 6. 为什么这行代码不工作?
- 7. 为什么这个Python代码工作?
- 8. 为什么这个JavaScript代码工作?
- 9. 这个代表为什么不工作?
- 10. 为什么不会这个PHP代码工作?
- 11. 为什么这个游标适配器代码不工作?
- 12. 为什么不是这个PHP代码片段工作?
- 13. 为什么我不能让这个工作代码的jsFiddle?
- 14. 为什么这个C#计时器代码不工作?
- 15. 为什么不能用这个幻灯片代码工作?
- 16. 为什么这个JavaScript代码不工作?
- 17. 为什么不工作这个表达式代码
- 18. 为什么不会这个简单的代码突然工作?
- 19. 为什么这个数据处理代码不工作?
- 20. 为什么这个jQuery脚本不工作代码点火器
- 21. 为什么不用这个简单的代码工作?
- 22. 为什么不工作这个批处理代码?
- 23. 为什么不按预期工作这个红宝石代码?
- 24. 为什么这个代码编译但不能实际工作?
- 25. 为什么这个PHP代码段不工作?
- 26. 为什么这个jQuery代码不工作
- 27. 为什么不是这个代码工作? C++
- 28. 这个C代码为什么工作? (它不应该)
- 29. 为什么这个汇编代码不工作?
- 30. 为什么这个JavaScript代码不能按预期工作?
“不工作”对您的问题没有用处。它有什么作用?你期望它做什么?你会得到什么输出/错误? “iws_config4.dat”中有什么? –
iam没有得到任何输出。我想在greped之前打印行。 – suvitha
你应该编辑你的问题,使其易于理解,而不是添加评论。你已经有足够的时间去了解如何处理问题的一些基本知识。 –