|
|
在每个 Unix 机器上的任何 shell 中使用任何 awk:
% j2 B: s2 I8 i2 d6 ^; D9 H
" n3 A5 U# q6 ]9 w# K$ awk 'sub(/^ +/,""){print a[++c] $0; next} {a[NR]=$0}' file
8 v- e8 ?+ o' x0 {4 I<ma x="1">ab</ma><r x="1">0</r>" o$ U, o1 j. T1 _; a( E
<ma x="2">af</ma><r x="2">0</r>2 H' \/ u0 w2 _. A, T
<ma x="3">ji</ma><r x="3">0</r>
* I) G# b( Z' ?$ r如果前导空格实际上是制表符,则将 ^ + 替换为 ^\t+。如果它可以是两者的混合,则在 POSIX awk 中使用 ^[[:space:]]+ 或在任何 awk 中使用 ^[ \t]+。
- c8 h$ ?( i, M' n7 Q7 S' `( t- c* J' N9 [1 K, ~; P% K
,8 B! y7 A8 X! f6 G
这对你有用吗?! I7 F7 k. ]2 P0 K/ A
0 n6 c$ n5 v9 s0 L1 H$ Q6 Z0 \此处 rows 是文件名....
4 `2 @) ?; v- Z9 t- e# X. D1 a$ K' h4 X9 t' [; ^- _! L
awk '{m=gensub(/.+ (x="[^"]+).*/,"\\1","1",$0);gsub(/^ +/,"",$0);a[m]=a[m] $0}END{for(i in a){print a[i]}}' rows0 \0 f9 G: a5 b$ u) O( f' P, A
<ma x="1">ab</ma><r x="1">0</r>
& c0 x* u" B5 L* V: j<ma x="2">af</ma><r x="2">0</r># {: S" x4 | W
<ma x="3">ji</ma><r x="3">0</r>
* L4 e! U2 _* N我们找到变量定义 x="??"并将其存储在 m 中;我们剥离前导空白;我们将整行分配给基于 m 的数组;然后我们遍历数组并打印它。, O1 n1 k5 W" _. X
: x. d: e) q1 c/ a+ m) u
注意:gensub 是特定于 GNU awk 的非 posix 扩展。 并且 awk 散列数组不能保证保持顺序;以上复制粘贴的输出顺序正确纯属巧合。" E) a- [, J$ Y4 P2 n' m
4 l3 P+ O, Z: Q
,( N% s5 m9 L1 I: }$ X9 w6 P& w
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" D8 u" _" d2 i% p
考虑到 x 值按行顺序递增,我只并排打印文件的前半部分和后半部分,而不是存储和匹配 x 值。: z d" `6 @" b3 P. h& b
% B' p- L. n e5 s
wc -l 是获取行数,在本例中为 6,因此文件行被拆分为 3 - 3 内的 awk. S7 |, k' Q0 d9 Y9 N* G8 K" K
2 b2 W7 e: p! Q5 Y' {6 T! F6 b3 P
|
|