次の出力を含む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を使用して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
答え1
以下を使用してsを抽出できますpid
。
$ awk 'NF == 6 {print $5}' inputfile | grep -Eo '[0-9]+'
660
660
660
660
Androidではを使用しているため、procfs
実際のバイナリをとして扱うことができます/proc/$pid/exe
。ただし、これは一般的なPOSIX規則に従わない魔法の(たとえば)シンボリックリンクであるため、ターゲットを見つけるprocfs
ためのより一般的な方法は使用できません。ただし、以下を使用できますstat
。
$ stat -c '%N' /proc/$$/exe
`/proc/4811/exe' -> `/system/bin/sh'
[...]
答え2
line#特定のファイルから情報を抽出するための仕様です。と構文パターン|操作規則。 awkはパッケージ化されていますが、連続した1行のスクリプトです。$
gawkから取得したシステム情報コードのaと#1-16を作成するだけです。プレイストアでガイドを受け取り、慣れていただければと思います。素晴らしいスクリプト言語です。 awk はオープンソースであり、# の名前を変更するには、いつでも情報要件に合わせてコードを変更できます。
$0 = all
$1 = 1st field
$2 = 2nd field
etc.,
$NF =the last field
これでアクションが必要になるので、aを入力し|
て中括弧で囲まれたフィールドと一重引用符で囲まれたフィールドに必要な情報を指定します。 includeに関する情報を確認しないでください---BEGIN
。 awkはAndroidでは必要ありませんが、おそらく私の携帯電話に私が思うよりも多くの権限があります。頑張ってください。私は最も低いレベルのawk..シンプルさのためのgawk =ガイドが好きです。