- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
在每个 Unix 机器上的任何 shell 中使用任何 awk: f% W8 z) f0 q2 z5 c6 E
+ ^1 D6 b7 S9 Z8 A2 h# v1 @+ k
$ awk 'sub(/^ +/,""){print a[++c] $0; next} {a[NR]=$0}' file
$ L9 T$ t: {' t) R% T* j<ma x="1">ab</ma><r x="1">0</r>
. c- Q0 k" P3 V; {8 V+ F<ma x="2">af</ma><r x="2">0</r>
2 _4 b/ F7 `) y<ma x="3">ji</ma><r x="3">0</r>
' i. R, m ^3 ?5 V7 D如果前导空格实际上是制表符,则将 ^ + 替换为 ^\t+。如果它可以是两者的混合,则在 POSIX awk 中使用 ^[[:space:]]+ 或在任何 awk 中使用 ^[ \t]+。# S+ { {0 U3 O$ p! z
+ @1 }' o! |& c/ D,
# p; Y) H) i" C) j$ k f0 M& z这对你有用吗?3 g; s$ m4 Y. y
; Q, g7 I, }* ~' j6 R$ e此处 rows 是文件名....
7 b5 N3 R1 C, C% _6 c1 m1 [9 X* M$ c* z3 D# Z9 H
awk '{m=gensub(/.+ (x="[^"]+).*/,"\\1","1",$0);gsub(/^ +/,"",$0);a[m]=a[m] $0}END{for(i in a){print a[i]}}' rows7 v4 f% J, P `' U( o
<ma x="1">ab</ma><r x="1">0</r>1 \/ W9 |+ U/ U% |/ c
<ma x="2">af</ma><r x="2">0</r>
! l: X4 I- K1 Y- p* P1 e+ F+ P<ma x="3">ji</ma><r x="3">0</r>
3 i5 u; I$ U t6 {我们找到变量定义 x="??"并将其存储在 m 中;我们剥离前导空白;我们将整行分配给基于 m 的数组;然后我们遍历数组并打印它。4 \: p% a9 h- b% C, S! I) I7 o
) _" ^& S) g8 f+ h, J# r
注意:gensub 是特定于 GNU awk 的非 posix 扩展。 并且 awk 散列数组不能保证保持顺序;以上复制粘贴的输出顺序正确纯属巧合。
8 h! e( ~4 W- ]0 \0 F8 s& X6 c0 l% P* v2 t! D7 M
,! ~( [0 ?6 S& M4 Z8 V4 g
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
3 `- \9 D7 F: ?* }$ F考虑到 x 值按行顺序递增,我只并排打印文件的前半部分和后半部分,而不是存储和匹配 x 值。0 ~$ [5 o0 D, Q7 h# A" t
5 B& n w: A" A9 T2 [3 T% vwc -l 是获取行数,在本例中为 6,因此文件行被拆分为 3 - 3 内的 awk
3 l, O' ?! L2 o% @- l" b, O g0 ~0 M1 b1 F9 Y I
|
|