|
|
在每个 Unix 机器上的任何 shell 中使用任何 awk:
% `) E8 N; a* g3 O
* h1 \6 |/ T5 ~# a6 Q5 w$ awk 'sub(/^ +/,""){print a[++c] $0; next} {a[NR]=$0}' file
' w4 S' V, o0 K9 ]- l/ u! ~- d<ma x="1">ab</ma><r x="1">0</r>& ?9 G3 {; ^$ q$ v3 l( ]
<ma x="2">af</ma><r x="2">0</r>
* M) {1 d& E. `9 T- j$ K2 B<ma x="3">ji</ma><r x="3">0</r>
" w6 M% N, S9 Q' c% P8 c+ W, v4 A如果前导空格实际上是制表符,则将 ^ + 替换为 ^\t+。如果它可以是两者的混合,则在 POSIX awk 中使用 ^[[:space:]]+ 或在任何 awk 中使用 ^[ \t]+。
: {, _4 M% G& h& ~7 f8 w6 P1 ?
' j4 b7 N) K T3 e$ H," `( J5 D9 g4 Q3 g$ W8 d; Z* |, k
这对你有用吗?
1 L0 w. b( {7 n0 p* i- t' ~/ i4 g. K# w0 M+ j' c
此处 rows 是文件名....
0 K4 V4 M( a" Y4 v* `- ?/ _ L# c. M
awk '{m=gensub(/.+ (x="[^"]+).*/,"\\1","1",$0);gsub(/^ +/,"",$0);a[m]=a[m] $0}END{for(i in a){print a[i]}}' rows$ e9 X2 L; _0 H/ E6 G. M
<ma x="1">ab</ma><r x="1">0</r>
8 z& m; P5 p0 H) \7 b<ma x="2">af</ma><r x="2">0</r>
, {& c: n2 `) S5 f; j# g<ma x="3">ji</ma><r x="3">0</r>
: ]- |4 T2 i* ^7 g/ m6 y9 i我们找到变量定义 x="??"并将其存储在 m 中;我们剥离前导空白;我们将整行分配给基于 m 的数组;然后我们遍历数组并打印它。) r8 j) a) o0 s' W
8 q6 L7 \# n f/ D( c0 `注意:gensub 是特定于 GNU awk 的非 posix 扩展。 并且 awk 散列数组不能保证保持顺序;以上复制粘贴的输出顺序正确纯属巧合。1 Z7 r4 X/ e! [ t$ \0 R6 V
$ R; n; k5 Y; C; [5 r) F,. ?% n& W( P1 v; y7 g$ E9 L' a+ Q
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& ^, `$ @2 U, U) U- c
考虑到 x 值按行顺序递增,我只并排打印文件的前半部分和后半部分,而不是存储和匹配 x 值。
' Q- u& g) L& F* }/ j' v% t4 a$ |. ?- b+ G1 G& \1 f" _
wc -l 是获取行数,在本例中为 6,因此文件行被拆分为 3 - 3 内的 awk
0 G- x6 N3 B- T% j0 Y1 p1 |' M8 `5 }6 @" ?
|
|