Printing 读取文件并根据条件执行一些写入操作
我是awk的新手。我自己到处寻找,想弄明白这一点,但失败了。这是我最后的办法。请帮忙 我有一个非常大的文件,如下所示Printing 读取文件并根据条件执行一些写入操作,printing,awk,count,skip,Printing,Awk,Count,Skip,我是awk的新手。我自己到处寻找,想弄明白这一点,但失败了。这是我最后的办法。请帮忙 我有一个非常大的文件,如下所示 *SET 7 636322 635890 632043 632044 636323 636322 632044 632045 *SET 8 636315 636323 632045 632046 *SET 9 635890 635889 635992 635994 635994
*SET
7
636322 635890 632043 632044
636323 636322 632044 632045
*SET
8
636315 636323 632045 632046
*SET
9
635890 635889 635992 635994
635994 635992 635991 635993
635995 635991 635992 635996
635996 635992 635889 635888
我想让它看起来像这样
1 636322 635890 632043 632044
1 636323 636322 632044 632045
2 636315 636323 632045 632046
3 635890 635889 635992 635994
3 635994 635992 635991 635993
3 635995 635991 635992 635996
3 635996 635992 635889 635888
基本上有一个条件,即查找字符串“SET”并跳过一行在第一列中添加计数id,打印该行的其余部分,直到看到下一个“SET”。继续,直到文件结束。提前感谢。分阶段进行
awk '/SET/ { counter++ }
NF == 4 {printf("%d\t%s\n", counter, $0); }'
首先,处理递增计数器的问题。您要匹配的模式是“SET”,因此在BEGIN块中定义一个变量,并在找到模式“SET”时增加它
接下来,查找输入中的其他重要行。不要操心空白行——如果它们与你定义的任何模式不匹配,没有什么会发生。
您的其他行与模式匹配:“行开始”“编号”
$0表示“与当前模式匹配的整条线”
当您遇到其中一行时,您希望输出cntr和$0
<>希望这是足够的提示,让您了解AWK >“代码> 7代码>代码>代码> 8代码< >代码> >代码> 9 <代码>哦,请忽略注释中的空行。由于一些奇怪的原因,当我试图删除空白行时,带有单个数字的行开始与字符串集相结合:-(在我的文件中,我将在这里操作,没有空行。抱歉混淆了。学习如何在这样做标记。如果您想发布文字或代码,请用鼠标标记并使用<代码>。{}code工具。用4个空格缩进的行是文字代码。感谢@Barmar的提示。我正在学习。非常感谢Barmar。这会在找到/SET/?后跳过一行吗?它会忽略除
SET
和NF==4
之外的所有行。不确定这应该如何解决OPs问题。echo
在这里做吗?明白了。事实上,我的文件中根本没有空行。我必须在我的笔记中添加它们,以防止两行由于某些不恰当的原因合并。我明白了你的建议。我怎么能忽略紧跟在/SET/之后的行。谢谢。我认为Barmar的回答涵盖了所有内容。对于awk,如果一行没有匹配模式,什么也没发生。
BEGIN {
cntr=1
}
/SET/ {
cntr++;
echo cntr;
}