- 积分
- 16844
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
在每个 Unix 机器上的任何 shell 中使用任何 awk:9 o( i o* U; |/ O" y, I/ u
5 o- r$ @7 f# {$ x/ U2 b$ awk 'sub(/^ +/,""){print a[++c] $0; next} {a[NR]=$0}' file
5 q7 S8 j! g; X) R& V/ u2 x7 G<ma x="1">ab</ma><r x="1">0</r> D5 f3 t& J" x% s: O
<ma x="2">af</ma><r x="2">0</r>- B. ]7 h; O5 [& r. [
<ma x="3">ji</ma><r x="3">0</r>
7 L8 d H# T" X# O) m j8 O如果前导空格实际上是制表符,则将 ^ + 替换为 ^\t+。如果它可以是两者的混合,则在 POSIX awk 中使用 ^[[:space:]]+ 或在任何 awk 中使用 ^[ \t]+。
# V% ^% x8 P C1 U6 F6 n3 C5 x# G
9 `+ E* e+ p/ w) F,
/ C+ m7 D6 ^' z0 U0 f& T+ J这对你有用吗?8 G# ?6 i. k6 t) Z
+ {5 j& ^2 R- L1 r( h3 E此处 rows 是文件名....: Y9 w0 t2 S2 M: O, z
/ r& x- d1 R4 ^, u% N# z1 u( aawk '{m=gensub(/.+ (x="[^"]+).*/,"\\1","1",$0);gsub(/^ +/,"",$0);a[m]=a[m] $0}END{for(i in a){print a[i]}}' rows
+ y! ], i" }" L( W<ma x="1">ab</ma><r x="1">0</r>
# w% w: t: t/ N. z7 R( U. P$ @3 i2 g<ma x="2">af</ma><r x="2">0</r>
3 s) N. I0 W8 N [. G<ma x="3">ji</ma><r x="3">0</r>/ Y8 @, p, y" i. S: ^" y
我们找到变量定义 x="??"并将其存储在 m 中;我们剥离前导空白;我们将整行分配给基于 m 的数组;然后我们遍历数组并打印它。
! g+ b% k* h6 ]
9 A" K: c' B8 p! p4 H注意:gensub 是特定于 GNU awk 的非 posix 扩展。 并且 awk 散列数组不能保证保持顺序;以上复制粘贴的输出顺序正确纯属巧合。0 n& k8 T# V1 ^* P0 M1 A0 d3 r; N
- x# t! \/ Y3 Y# B,+ ? U# R" b' S5 @/ V: h
lastline=$(wc -l < log) | awk -F'"' -v line=$lastline '{ if(NR<=line/2) arr[NR]=$0; gsub(/^ +/,$0); if(NR>line/2) print arr[NR-line/2] $0}' log
8 M' `& T+ K# j) t& \$ s考虑到 x 值按行顺序递增,我只并排打印文件的前半部分和后半部分,而不是存储和匹配 x 值。: y. [% b; m" X8 b7 e) C
; ^9 Q$ G/ m4 O6 v. K+ [0 @wc -l 是获取行数,在本例中为 6,因此文件行被拆分为 3 - 3 内的 awk# `: P' u* }2 z, p' I0 J
! d) F( M9 f" } |
|