我的数据如下所示:
0 1 0 0
0 0 0 1
0 0 0 1
0 1 0 0
我想使用 awk 在同一列中直接打印所有带有 1 的后续行。我该怎么做?
编辑:
awk 中是否无法指定上一列,例如“$ 1-1”(我知道那是错误的顺便说一句)?
这过于简单,但它适用于您的示例数据:
awk '$0 == prev {print} {prev = $0}' inputfile
如果要打印两行(相同):
awk '$0 == prev {print; print} {prev = $0}' inputfile
或者
awk '$0 == prev {print prev; print} {prev = $0}' inputfile
我假设每行都有一个。 1
进一步假设您的数据在 data.input 中。
用法:
awk -f foo.awk data.input
foo.awk:
function printBlock() {
for(i=0; i<N; i++) {
print BLOCK[i];
}
}
{
for(col=1; col<=NF; col++) {
if($col==1) break;
}
if(col != last_col) {
if(N > 1) {
printBlock()
}
N = 0
}
BLOCK[N++] = $0;
last_col = col;
}
END {
if(N > 1) {
printBlock()
}
}