Shell 为什么这个代码不起作用?
您可以使用本机Shell 为什么这个代码不起作用?,shell,unix,awk,ksh,Shell,Unix,Awk,Ksh,您可以使用本机awk编写程序,如下所示: #! /bin/ksh awk -F':' '{ if( match($0,":server:APBS") ) { print x; x=$0; } }' iws_config4.dat awk程序由模式和这些模式匹配时要采取的操作组成。你所写的无异于滥用awk的内置功能 假设您只对$0感兴趣,那么字段分隔符是多余的,因此-F':'参数可以使用 您的程序所做的是: 读一行 如果它与模式匹配 打印匹配的最后一行 保存当前行 因此,如果您的输入
awk
编写程序,如下所示:
#! /bin/ksh
awk -F':' '{
if( match($0,":server:APBS") )
{
print x;
x=$0;
}
}' iws_config4.dat
awk
程序由模式和这些模式匹配时要采取的操作组成。你所写的无异于滥用awk
的内置功能
假设您只对$0
感兴趣,那么字段分隔符是多余的,因此-F':'
参数可以使用
您的程序所做的是:
- 读一行
- 如果它与模式匹配
- 打印匹配的最后一行
- 保存当前行
如果希望模拟“
grep-B1:server:APBS iws_config4.dat
”,您可以:
awk -F':' '/:server:APBS/ { print x; x=$0; }' iws_config4.dat
如果行匹配,则打印旧的保存行。
无论如何,将当前行存储为(新的)旧保存行
它可能可以全部展平到一条线上。模式匹配在无条件保存之前至关重要
给定所显示的脚本
k.awk
和数据文件iws_config4.dat
,我得到了预期的输出。你得到了什么?你期待什么
awk '/:server:APBS/ { print old }
{ old = $0 }' 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
将程序编写为:
#! /bin/ksh
awk -F':' '{
if( match($0,":server:APBS") )
{
print x;
x=$0;
}
}' iws_config4.dat
awk
程序由模式和这些模式匹配时要采取的操作组成。你所写的无异于滥用awk
的内置功能
假设您只对$0
感兴趣,那么字段分隔符是多余的,因此-F':'
参数可以使用
您的程序所做的是:
- 读一行
- 如果它与模式匹配
- 打印匹配的最后一行
- 保存当前行
如果希望模拟“
grep-B1:server:APBS iws_config4.dat
”,您可以:
awk -F':' '/:server:APBS/ { print x; x=$0; }' iws_config4.dat
如果行匹配,则打印旧的保存行。
无论如何,将当前行存储为(新的)旧保存行
它可能可以全部展平到一条线上。模式匹配在无条件保存之前至关重要
给定所显示的脚本
k.awk
和数据文件iws_config4.dat
,我得到了预期的输出。你得到了什么?你期待什么
awk '/:server:APBS/ { print old }
{ old = $0 }' 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
$
第二行现在仅在包含至少一个非空字符的行中处于活动状态,因此将只保存这些行。“不工作”不是对问题的有用描述。它有什么作用?你期望它做什么?您得到了哪些输出/错误?
iws\u config4.dat中有什么?我没有得到任何输出。我想在greed之前打印这行。你应该编辑你的问题,使其易于理解,而不是添加评论。您已经学习了一些处理问题的基础知识,可能是因为您没有正确地复制:您感兴趣的输入文件行之间是否有空行(在您之前的问题中似乎是这样的)?如果是这样的话,你需要用各种可能的方法过滤掉它们。“不工作”不是对你的问题的有用描述。它有什么作用?你期望它做什么?您得到了哪些输出/错误?iws\u config4.dat中有什么?我没有得到任何输出。我想在greed之前打印这行。你应该编辑你的问题,使其易于理解,而不是添加评论。您已经学习了一些处理问题的基础知识,可能是因为您没有正确地复制:您感兴趣的输入文件行之间是否有空行(在您之前的问题中似乎是这样的)?如果是这样,您需要用多种可能的方法之一将它们过滤掉。@suvitha:如果您的输入文件在:Server:APBS行之前有空行,根据您在此处提出的问题(),那么您将得到空行作为输出。这就是你所说的“没有输出”的意思吗?@suvitha:如果你的输入文件在:Server:APBS行之前有空行,那么根据你在这里的问题(),你将得到空行作为输出。这就是你所说的“无输出”吗?