Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/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
Bash解析特定行的命令的分段输出_Bash_Awk - Fatal编程技术网

Bash解析特定行的命令的分段输出

Bash解析特定行的命令的分段输出,bash,awk,Bash,Awk,我有一个命令,输出一系列行,如下所示 第一个数字是第二个数字代表关键字。 我想能够解析关键字2、3和5。 输入 输出 12 13 15 \n 22 23 25 \n (continues for other 2 sections) 格雷普给了我 12 22 13 23 15 25 (等等) 我不太确定如何使用awk。 我的最终目标是将其放入一个脚本中,其中解析部分(或行)的输出将进入一个临时文件 这里有一种方法: $ awk '$1~/[235]$/{p=1;print}!$1&&a

我有一个命令,输出一系列行,如下所示 第一个数字是第二个数字代表关键字。 我想能够解析关键字2、3和5。 输入

输出

12
13
15
\n
22
23
25
\n 
(continues for other 2 sections)
格雷普给了我 12 22 13 23 15 25 (等等) 我不太确定如何使用awk。 我的最终目标是将其放入一个脚本中,其中解析部分(或行)的输出将进入一个临时文件

这里有一种方法:

$ awk '$1~/[235]$/{p=1;print}!$1&&p{p=0;print}' file
12
13
15

22
23
25

为了仅用一个换行符分隔记录,使用了标志
p
,当我们在第一个块中打印匹配项时,以及当我们到达每条记录后的第一个空行时,即
,我们设置
p
$1 我们打印空白行并取消设置标志以忽略下两个。 带设置的awkRS

awk '{while(++i<=NF)if($i~/[235]$/)print $i;i=0;print ""}' RS="" file
编辑

 awk '/^\s*$/{a[NR];if(!(NR-1 in a))print} /[235]$/{print}' file

那么在这种情况下,它说[235]是在哪里设置键值的呢?这对文本有什么作用呢?那么你需要给出文本的匹配条件。只要正则表达式可以匹配您所需的文本,该行就可以工作。我喜欢这段代码的问题是,它只打印我正在搜索的单词,而不是整行。有没有办法改变这种行为?我似乎无法让它匹配文本而不是数字。在行中搜索单词会改变代码吗?我建议你提出一个新问题。您没有提到要匹配哪种文本。看看你问题中的例子,刚才说以2,3,5结尾。这两条awk生产线都是为你做的。一个是基于字段的,一个是基于行的。一个新问题可能更好。写一个恰当的例子,并清楚地解释你的匹配标准。如果我将[235]改为单词,它还会起作用吗?最后的文件就是我正在读取的文件。有没有可能将命令输出到这个文件中?你可以做任何你喜欢的正则表达式匹配,是的,管道不是问题。
12
13
15

22
23
25
 awk '/^\s*$/{a[NR];if(!(NR-1 in a))print} /[235]$/{print}' file