易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 395|回复: 0
收起左侧

awk 统计字符个数

[复制链接]
发表于 2023-6-17 08:19:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
在每个 Unix 机器上的任何 shell 中使用任何 awk:7 v, m& M2 i. r2 `

2 A/ h  ?  b& Y% G7 V. u8 e3 w5 r$ awk 'sub(/^ +/,""){print a[++c] $0; next} {a[NR]=$0}' file& R& y6 Y# x2 @" H, `! M* _+ h5 o
<ma x="1">ab</ma><r x="1">0</r>* O) z4 V, \! a# e7 z
<ma x="2">af</ma><r x="2">0</r>+ P# @. e: J# R" \
<ma x="3">ji</ma><r x="3">0</r>7 h- p8 v5 Y6 \
如果前导空格实际上是制表符,则将 ^ + 替换为 ^\t+。如果它可以是两者的混合,则在 POSIX awk 中使用 ^[[:space:]]+ 或在任何 awk 中使用 ^[ \t]+。0 |  t4 y. }$ p
+ t- \, u8 r  }) B. f  F
,
2 ~. T& ], ~% b# q这对你有用吗?
4 y  I& y8 r- R4 a
/ B) L/ \" Q& M- J9 L1 F; h( r+ O' z此处 rows 是文件名....# B9 y8 Q$ A  L% T7 C

* B3 K9 G3 A' Mawk '{m=gensub(/.+ (x="[^"]+).*/,"\\1","1",$0);gsub(/^ +/,"",$0);a[m]=a[m] $0}END{for(i in a){print a[i]}}' rows$ B5 q" c+ X3 S
<ma x="1">ab</ma><r x="1">0</r>
+ T# P  p# b5 {/ K6 g( c* z6 G% |<ma x="2">af</ma><r x="2">0</r>
/ Y  w2 W  y9 c) h6 C<ma x="3">ji</ma><r x="3">0</r>
, \% {+ m# l7 m我们找到变量定义 x="??"并将其存储在 m 中;我们剥离前导空白;我们将整行分配给基于 m 的数组;然后我们遍历数组并打印它。" D- Q9 w: s9 a: }" s

( f' w% L& R. L4 \( V6 F2 M. F注意:gensub 是特定于 GNU awk 的非 posix 扩展。 并且 awk 散列数组不能保证保持顺序;以上复制粘贴的输出顺序正确纯属巧合。) T/ v3 [. W9 n7 t! o2 u

- k6 h4 ~! i' v8 k! A4 {1 ]3 h  W, U,) o4 X6 b5 {) A( v
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}' log1 k$ t8 |! t0 n+ p7 }
考虑到 x 值按行顺序递增,我只并排打印文件的前半部分和后半部分,而不是存储和匹配 x 值。
+ h6 V% l3 r! v5 A5 ^& Y& _
2 o; \% j3 a' U5 @$ j* Kwc -l 是获取行数,在本例中为 6,因此文件行被拆分为 3 - 3 内的 awk
% h4 I9 Q7 P- S) @5 P* Y/ J0 Y* ?0 c$ [
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:41 , Processed in 0.047761 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表