Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 为什么这个代码不起作用?_Shell_Unix_Awk_Ksh - Fatal编程技术网

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行之前有空行,那么根据你在这里的问题(),你将得到空行作为输出。这就是你所说的“无输出”吗?