我有一个包含行组的文本文件,从中我只需要每组中的前三行.
文件:
test1|pass
test1|pass
test1|pass
test1|pass
test1|pass
test2|fail
test2|fail
test2|fail
test2|fail
test3|pass
test3|pass
test3|pass
test3|pass
Run Code Online (Sandbox Code Playgroud)
预期产出:
test1|pass
test1|pass
test1|pass
test2|fail
test2|fail
test2|fail
test3|pass
test3|pass
test3|pass
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么:
BEGIN {
FS = "|"
}
$1==x {
if (NR % 5 <= 3) {
print $0
}
next
}
{
x=$1
print $0
}
END {
printf "\n"
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样简洁地做到这一点:
awk -F'|' '++a[$1] <= 3' infile
Run Code Online (Sandbox Code Playgroud)
输出:
test1|pass
test1|pass
test1|pass
test2|fail
test2|fail
test2|fail
test3|pass
test3|pass
test3|pass
Run Code Online (Sandbox Code Playgroud)
说明
a
是一个关联数组.我们使用每一行($1
)的第一个元素作为键a
并增加其值.然后将该值与之比较3
,如果比较为真,则执行默认块({print $0}
).