gpt4 book ai didi

bash - awk 在 dumpsys 中输出特定列时遇到问题

转载 作者:行者123 更新时间:2023-11-29 09:47:30 26 4
gpt4 key购买 nike

我在使用 awk 从日志文件输出特定列时遇到问题。

输入:文件中包含多个快照的 dumpsys meminfo 日志尝试的输出:PSS、堆大小、堆分配和堆空闲总计。
小旁注:我正在用 js 数组语法格式化输出。我稍后会处理右括号

下面的示例输入(其中几个快照在实际文件中):

Applications Memory Usage (kB):
Uptime: 232535528 Realtime: 544103118

** MEMINFO in pid 28141 [com.test.helloworld] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 0 0 0 0 246840 217671 648
Dalvik Heap 8327 8208 0 556 11892 10861 1031
Dalvik Other 2639 2288 124 1012
Stack 528 528 0 0
Ashmem 138 128 0 0
Other dev 89770 11540 69612 0
.so mmap 10497 2204 7836 8448
.apk mmap 280 0 140 0
.dex mmap 1219 64 444 244
Other mmap 950 576 128 736
Unknown 223484 223468 0 96
TOTAL 337832 249004 78284 11092 258732 228532 1679

Objects
Views: 9 ViewRootImpl: 1
AppContexts: 4 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 14 Proxy Binders: 24
Death Recipients: 1
OpenSSL Sockets: 4

SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0

这是一个奇怪的问题。我的 awk 命令可以输出除第 8 列以外的所有列。

工作示例 - 没有尝试输出第 8 列,而是输出 $1,它按预期工作。 注意 - 为了 stackoverflow 的可读性,我将 awk 命令分成几行,实际上我将它全部输入一行:

awk -v line_counter="$COUNTER" -v row_operand=0 '       
BEGIN{row_operand=NR%19;
if (row_operand == 0){
print "[[\x27 frame \x27,\x27 Total_PSS_RAM_Usage \x27,\x27 Heap_Size \x27,\x27 Heap_Alloc \x27,\x27 Heap_Free \x27],"
}
}
{row_operand=NR-19;row_operand=row_operand%32;
if (row_operand == 0){
print "["line_counter","$2","$6","$7","$1" ],"
}
}' logfile.txt

And the output:

[[' frame ',' Total_PSS_RAM_Usage ',' Heap_Size ',' Heap_Alloc ',' Heap_Free '],
[0,337832,258732,228532,228532 ],
[0,338591,258732,227821,227821 ],
[0,338431,214996,202579,202579 ],

问题示例:当尝试输出第 8 列 $8 时,整个输出格式中断并且 row_operand 值被完全省略。我很困惑,因为我只更改一位数字(即 1 美元到 8 美元)以获得这些不同的结果。

awk -v line_counter="$COUNTER" -v row_operand=0 '
BEGIN{row_operand=NR%19;
if (row_operand == 0){
print "[[\x27 frame \x27,\x27 Total_PSS_RAM_Usage \x27,\x27 Heap_Size \x27,\x27 Heap_Alloc \x27,\x27 Heap_Free \x27],"
}
}
{row_operand=NR-19;row_operand=row_operand%32;
if (row_operand == 0){print "["line_counter","$2","$6","$7","$8" ],"
}
}' logfile.txt

And the ouput:

[[' frame ',' Total_PSS_RAM_Usage ',' Heap_Size ',' Heap_Alloc ',' Heap_Free '],
],337832,258732,228532,1679
],338591,258732,227821,2390
],338431,214996,202579,5864

如有任何帮助,我们将不胜感激。

最佳答案

首先,我不认为“row_operand 值被完全省略”;您的两个示例都显示了 3 行输出 - 第一行的字段值为“337832,258732,228532”。此外,果然,该行的第 8 个字段值确实显示 1679,这对于您显示的示例是正确的。

因此,所有数据都在那里,但方括号已移至输出行的开头。

所以,我将您的示例文本复制到我的 linux 系统上,并得到:

[[' frame ',' Total_PSS_RAM_Usage ',' Heap_Size ',' Heap_Alloc ',' Heap_Free '],
[,337832,258732,228532,1679 ],

但是,当我将输入文件从 Unix 格式更改为 DOS 格式时,我得到:

[[' frame ',' Total_PSS_RAM_Usage ',' Heap_Size ',' Heap_Alloc ',' Heap_Free '],
],37832,258732,228532,1679

这就是问题所在 - 您一定是在 Windows 的某个阶段保存了文件。

在不同的系统上有不同的工具来进行转换(例如 dos2unix )- 看看 How to convert DOS/Windows newline (CRLF) to Unix newline (\n) in a Bash script? - 或者在互联网上搜索“dos to unix”

关于bash - awk 在 dumpsys 中输出特定列时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com