これは私がよく直面する問題です。今回は出力から発生しますlsof
が、私はこの種の問題に対する一般的な解決策を探しています:列の選択。
ここでは、出力のTYPE列を取得しようとしています。lsof
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lsof 16113 root cwd DIR 0,58 40960 7602184 /home/rubo77
lsof 16113 root rtd DIR 259,7 4096 2 /
lsof 16113 root 4r FIFO 0,12 0t0 294763 pipe
lsof 16113 root 7w FIFO 0,12 0t0 294764 pipe
lsof 16648 root rtd DIR 259,7 4096 2 /
riot-web 4399 4424 ruben 25u unix 0xffff9543f9ad7000 0t0 53133 type=STREAM
thunderbi 4650 5835 ruben DEL REG 259,7 2752546 /usr/share/icons/hicolor/icon-theme.cache
...
頑張った
lsof|perl -lane 'print $F[5]'
しかし、これは時々列6を取得し、時には列5を取得します。
わかりました。
lsof|cut -c50-54|sort|uniq -c
375 CHR
610 DIR
211 FIFO
...
しかし、キャラクターの位置を修正しなければならないので少し汚れて見えます。
主な問題は、一部の行で5番目の列が空であることです。
実際に出力の6番目の列だけを選択するソリューションはありますか?
最良の解決策はshow row Pillarと言うツールです。
ベストアンサー1
この-F
オプションを使用すると、解析に適した出力を得ることができます。
lsof -F t | awk '/^t/ {print substr($0,2)}'
次のOUTPUT FOR OTHER PROGRAMS
セクションを参照してください。man lsof
より一般的には、フィールドが明確に区別されない限り、ヘッダー行から文字位置を検索する必要があるかもしれません。
awk -v field="TYPE" 'NR==1 {c = index($0,field)} {print substr($0,c,length(field))}'