Awk
在 Android 命令上使用 awk
我有一個 Android 命令,其輸出如下:
$adb shell "head -20 /d/dma_buf/bufinfo" Dma-buf Objects: size flags mode count exp_name buf name 00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf210 Attached Devices: Total 0 devices attached 09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf209 Attached Devices: kgsl-3d0 Total 1 devices attached 00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf208 Attached Devices: Total 0 devices attached 09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf207 Attached Devices: kgsl-3d0 Total 1 devices attached
文件中有類似的條目。現在我想要的是從 exp_name 欄位中提取 pid(核心無法訪問大於 16 個字節的完整名稱),並使用
ps pid -o comm=
cf從 ps 輸出中獲取該程序的完整名稱。$$ 1 $$
$1
並將其與awk 輸出一起列印。我被困在如何檢索它。我從以下命令開始$adb shell "sed -n '/dmabuf/p' /d/dma_buf/bufinfo|head -10"|awk ' BEGIN { touch temp} {echo $5 > temp; pid = $(cut -d '-' -f 3,3 temp);} END { rm temp} '
但這會產生語法錯誤:
awk: cmd. line:2: BEGIN { touch temp} {echo $5 > temp; pid = $(cut -d - -f 3,3 temp);} awk: cmd. line:2: ^ syntax error
$$ 1 $$Android awk 存在問題,因此我求助於主機 Linux 機器的實用程序。
$adb shell "awk '/dmabuf/{print}' /d/dma_buf/bufinfo|head -3" 00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf210 09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf209 00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf208 adb shell "awk '/dmabuf/{print NF}' /d/dma_buf/bufinfo|head -3" 6 6 6
所以這個輸出有 6 個欄位(用製表符分隔)。然而,當我嘗試列印單個欄位時,它並沒有這樣做並且仍然列印整行。
$adb shell "awk '/dmabuf/{print $4}' /d/dma_buf/bufinfo|head -3" 00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf210 09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf209 00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf208
我可以用以下方法提取
pid
s:$ awk 'NF == 6 {print $5}' inputfile | grep -Eo '[0-9]+' 660 660 660 660
由於 Android 使用
procfs
,您可以在/proc/$pid/exe
.procfs
但是,由於這是一個不符合普通 POSIX 規則的魔法(即)符號連結,因此您不能使用更常見的方法來找到它的目標。但是,您可以使用stat
:$ stat -c '%N' /proc/$$/exe `/proc/4811/exe' -> `/system/bin/sh' [...]
line # 特定文件資訊提取的規範。以及語法模式|操作規則。awk 是連續的單行腳本,儘管已包裝。只需編寫
$
從 gawk 獲得的系統資訊程式碼的 a 和 #1-16。也許可以在 Playstore 上獲取指南並習慣它。它是一種出色的腳本語言。並且 awk 是開源的,如果您想重命名 # 您可以隨時更改程式碼以滿足您的資訊需求。$0 = all $1 = 1st field $2 = 2nd field etc., $NF =the last field
現在你需要操作,所以輸入 a
|
並指定你想要的資訊,從花括號中的哪些欄位和單引號中的整個內容…idk 關於包括---BEGIN
. awk 在 android 上不需要它,但是我可以在我的手機上擁有比我知道的更多的 priv 也..祝你好運,我喜歡 gawk= awk 的指南 ..最簡單的最低點。