我想在“* Apple”专栏上打印下两行。
$cat file.txt
*Apple
1234
abcd
*Apple
4567
dcba
*Apple
6789
qwer
*Apple
6890
rewq
期望的输出:
*Apple 1234 abcd
*Apple 4567 dcba
*Apple 6789 qwer
*Apple 6890 rewq
我想用awk解决方案。
答案 0 :(得分:1)
awk -vt=-1 '
/^\*Apple\s*$/ { if (t > -1) print ""; t = 2; printf("%s", $0); next }
t > 0 { t--; printf(" %s", $0) }
' file
输入
*Apple
111
222
aaa
*Apple
333
*Apple
*Apple
444
输出
*Apple 111 222
*Apple 333
*Apple
*Apple 444
注意,\s
是gawk-specific。对于其他AWK实现,请改用[[:space:]]
。
答案 1 :(得分:0)
问题没有明确说明(你只想要两行,还是只是你的特定例子在每次出现目标字符串后只有两行?),但这可能会让你开始:
awk '/^\*Apple$/{print "\n"}1; END{print "\n"}' ORS=' ' input
这个只打印2行,但会在大多数行的开头产生虚假空间:
awk '/^\*Apple$/{c=3}c; c--==1 {print "\n"}' ORS=' ' input
你可以通过以下方式失去领先空间:
awk '/^\*Apple$/{c=3} c {printf "%s%c", $0, c--==1 ? "\n":" "}' input