我是awk的新手。我自己搜索了一遍,然后自己弄明白了。这是我的最后一招。请帮忙。
我有一个非常大的文件如下;
*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'并跳过一行在第一列中添加一个count-id,打印该行的其余部分继续,直到它看到下一个'SET'。继续,直到文件结束。提前谢谢。
答案 0 :(得分:2)
awk '/SET/ { counter++ }
NF == 4 {printf("%d\t%s\n", counter, $0); }'
答案 1 :(得分:0)
分阶段进行。
首先,处理递增计数器。您要匹配的模式是“SET”,因此在BEGIN块中定义一个变量,并在找到模式“SET”时递增它
BEGIN {
cntr=1
}
/SET/ {
cntr++;
echo cntr;
}
接下来,查看与输入中的其他重要行匹配。不要打扰空白行 - 如果它们与您定义的任何模式都不匹配,则不会发生任何事情。
您的其他行符合模式:“行首”“数字”。
$ 0是awk-代表“与当前模式匹配的整行”。
当您遇到其中一行时,您想要输出cntr和$ 0.
希望这有足够的提示让你在那里,而你学习更多关于awk