Blame scripts/list_fields.awk

Packit 6f02de
# $Id: list_fields.awk,v 1.3 97/09/23 09:32:38 abe Exp $
Packit 6f02de
#
Packit 6f02de
# list_fields.awk -- sample awk script to list lsof full field output
Packit 6f02de
#		     (i.e., -F output without -0)
Packit 6f02de
#
Packit 6f02de
# NB: this is not particularly elegant awk; several sections were
Packit 6f02de
#     replicated, perhaps unnecessarily, to produce a sample quickly
Packit 6f02de
#     and simply.
Packit 6f02de
#
Packit 6f02de
#
Packit 6f02de
# Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
Packit 6f02de
# 47907.  All rights reserved.
Packit 6f02de
#
Packit 6f02de
# Written by Victor A. Abell
Packit 6f02de
#
Packit 6f02de
# This software is not subject to any license of the American Telephone
Packit 6f02de
# and Telegraph Company or the Regents of the University of California.
Packit 6f02de
#
Packit 6f02de
# Permission is granted to anyone to use this software for any purpose on
Packit 6f02de
# any computer system, and to alter it and redistribute it freely, subject
Packit 6f02de
# to the following restrictions:
Packit 6f02de
#
Packit 6f02de
# 1. Neither the authors nor Purdue University are responsible for any
Packit 6f02de
#    consequences of the use of this software.
Packit 6f02de
#
Packit 6f02de
# 2. The origin of this software must not be misrepresented, either by
Packit 6f02de
#    explicit claim or by omission.  Credit to the authors and Purdue
Packit 6f02de
#    University must appear in documentation and sources.
Packit 6f02de
#
Packit 6f02de
# 3. Altered versions must be plainly marked as such, and must not be
Packit 6f02de
#    misrepresented as being the original software.
Packit 6f02de
#
Packit 6f02de
# 4. This notice may not be removed or altered.
Packit 6f02de
Packit 6f02de
# Clear file and process status.
Packit 6f02de
Packit 6f02de
BEGIN {
Packit 6f02de
  fhdr = fdst = pidst = 0;
Packit 6f02de
  access = dev = devch = fd = inode = lock = name = offset = "";
Packit 6f02de
  proto = size = state = stream = type = "";
Packit 6f02de
  cmd = login = pgrp = pid = ppid = uid = "";
Packit 6f02de
}
Packit 6f02de
Packit 6f02de
# Start a new process.
Packit 6f02de
Packit 6f02de
/^p/ {
Packit 6f02de
  val = substr($0, 2);
Packit 6f02de
  if (pidst) {
Packit 6f02de
Packit 6f02de
  # Print a previously accumulated process set.
Packit 6f02de
Packit 6f02de
    printf "COMMAND       PID    PGRP    PPID  USER\n";
Packit 6f02de
    printf "%-9.9s  %6d  %6d  %6d", cmd, pid, pgrp, ppid;
Packit 6f02de
    if (login != "") { printf "  %s\n", login }
Packit 6f02de
    else { printf "  %s\n", uid }
Packit 6f02de
    pidst = 0;
Packit 6f02de
    cmd = login = pgrp = pid = uid = "";
Packit 6f02de
  }
Packit 6f02de
  if (fdst) {
Packit 6f02de
Packit 6f02de
  # Print a previously accumulated file set.
Packit 6f02de
Packit 6f02de
    if (fhdr == 0) {
Packit 6f02de
      printf "      FD   TYPE      DEVICE   SIZE/OFF      INODE  NAME\n";
Packit 6f02de
    }
Packit 6f02de
    printf "    %4.4s%1.1s%1.1s %4.4s", fd, access, lock, type;
Packit 6f02de
    t = dev; if (devch != "") { t = devch }
Packit 6f02de
    printf("  %10.10s", t);
Packit 6f02de
    t = size; if (offset != "") { t = offset }
Packit 6f02de
    printf " %10.10s", t;
Packit 6f02de
    t = inode; if (proto != "") { t = proto }
Packit 6f02de
    printf " %10.10s", t;
Packit 6f02de
    t = stream; if (name != "") {t = name }
Packit 6f02de
    printf "  %s", t;
Packit 6f02de
    if (state != "") { printf " %s)\n", state } else { printf "\n" }
Packit 6f02de
    access = dev = devch = fd = inode = lock = name = offset = "";
Packit 6f02de
    proto = size = state = stream = type = "";
Packit 6f02de
    fdst = fhdr = 0
Packit 6f02de
  }
Packit 6f02de
Packit 6f02de
# Record a new process.
Packit 6f02de
Packit 6f02de
  pidst = 1;
Packit 6f02de
  pid = val;
Packit 6f02de
}
Packit 6f02de
Packit 6f02de
/^g|^c|^u|^L|^R/ {
Packit 6f02de
Packit 6f02de
# Save process set information.
Packit 6f02de
Packit 6f02de
  id = substr($0, 1, 1);
Packit 6f02de
  val = substr($0, 2);
Packit 6f02de
  if (id == "g") { pgrp = val; next }		# PGRP
Packit 6f02de
  if (id == "c") { cmd = val; next }		# command
Packit 6f02de
  if (id == "u") { uid = val; next }		# UID
Packit 6f02de
  if (id == "L") { login = val; next }		# login name
Packit 6f02de
  if (id == "R") { ppid = val; next }		# PPID
Packit 6f02de
}
Packit 6f02de
Packit 6f02de
/^f|^a|^l|^t|^d|^D|^s|^o|^i|^P|^S|^T|^n/ {
Packit 6f02de
Packit 6f02de
# Save file set information.
Packit 6f02de
Packit 6f02de
  id = substr($0, 1, 1);
Packit 6f02de
  val = substr($0, 2);
Packit 6f02de
  if (id == "f") {
Packit 6f02de
    if (pidst) {
Packit 6f02de
Packit 6f02de
    # Print a previously accumulated process set.
Packit 6f02de
Packit 6f02de
      printf "COMMAND       PID    PGRP    PPID  USER\n";
Packit 6f02de
      printf "%-9.9s  %6d  %6d  %6d", cmd, pid, pgrp, ppid;
Packit 6f02de
      if (login != "") { printf "  %s\n", login }
Packit 6f02de
      else { printf "  %s\n", uid }
Packit 6f02de
      pidst = 0;
Packit 6f02de
      cmd = login = pgrp = pid = uid = "";
Packit 6f02de
    }
Packit 6f02de
    if (fdst) {
Packit 6f02de
Packit 6f02de
      # Print a previously accumulated file set.
Packit 6f02de
Packit 6f02de
	if (fhdr == 0) {
Packit 6f02de
	  printf "      FD   TYPE      DEVICE   SIZE/OFF      INODE  NAME\n";
Packit 6f02de
	}
Packit 6f02de
	fhdr = 1;
Packit 6f02de
	printf "    %4.4s%1.1s%1.1s %4.4s", fd, access, lock, type;
Packit 6f02de
	t = dev; if (devch != "") { t = devch }
Packit 6f02de
	printf("  %10.10s", t);
Packit 6f02de
	t = size; if (offset != "") { t = offset }
Packit 6f02de
	printf " %10.10s", t;
Packit 6f02de
	t = inode; if (proto != "") { t = proto }
Packit 6f02de
	printf " %10.10s", t;
Packit 6f02de
	t = stream; if (name != "") {t = name }
Packit 6f02de
	printf "  %s", t;
Packit 6f02de
	if (state != "") { printf " %s)\n", state } else { printf "\n" }
Packit 6f02de
	access = dev = devch = fd = inode = lock = name = offset = "";
Packit 6f02de
	proto = size = state = stream = type = "";
Packit 6f02de
    }
Packit 6f02de
Packit 6f02de
  # Start an new file set.
Packit 6f02de
Packit 6f02de
    fd = val;
Packit 6f02de
    fdst = 1;
Packit 6f02de
    next;
Packit 6f02de
  }
Packit 6f02de
Packit 6f02de
# Save file set information.
Packit 6f02de
Packit 6f02de
  if (id == "a") { access = val; next }		# access
Packit 6f02de
  if (id == "l") { lock = val; next }		# lock
Packit 6f02de
  if (id == "t") { type = val; next }		# type
Packit 6f02de
  if (id == "d") { devch = val; next }		# device characters
Packit 6f02de
  if (id == "D") { dev = val; next }		# device major/minor numbers
Packit 6f02de
  if (id == "s") { size = val; next }		# size
Packit 6f02de
  if (id == "o") { offset = val; next }		# offset
Packit 6f02de
  if (id == "i") { inode = val; next }		# inode number
Packit 6f02de
  if (id == "P") { proto = val; next }		# protocol
Packit 6f02de
  if (id == "S") { stream = val; next }		# stream name
Packit 6f02de
  if (id == "T") {				# TCP/TPI state
Packit 6f02de
    if (state == "") {
Packit 6f02de
      state = sprintf("(%s", val);
Packit 6f02de
    } else {
Packit 6f02de
      state = sprintf("%s %s", state, val);
Packit 6f02de
    }
Packit 6f02de
    next
Packit 6f02de
  }
Packit 6f02de
  if (id == "n") { name = val; next }		# name, comment, etc.
Packit 6f02de
}
Packit 6f02de
Packit 6f02de
END {
Packit 6f02de
  if (pidst) {
Packit 6f02de
Packit 6f02de
  # Print last process set.
Packit 6f02de
Packit 6f02de
    printf "COMMAND       PID    PGRP    PPID  USER\n";
Packit 6f02de
    printf "%-9.9s  %6d  %6d  %6d", cmd, pid, pgrp, ppid;
Packit 6f02de
    if (login != "") { printf "  %s\n", login }
Packit 6f02de
    else { printf "  %s\n", uid }
Packit 6f02de
  }
Packit 6f02de
  if (fdst) {
Packit 6f02de
Packit 6f02de
  # Print last file set.
Packit 6f02de
Packit 6f02de
    if (fhdr == 0) {
Packit 6f02de
      printf "      FD   TYPE      DEVICE   SIZE/OFF      INODE  NAME\n";
Packit 6f02de
    }
Packit 6f02de
    printf "    %4.4s%1.1s%1.1s %4.4s", fd, access, lock, type;
Packit 6f02de
    t = dev; if (devch != "") { t = devch }
Packit 6f02de
    printf("  %10.10s", t);
Packit 6f02de
    t = size; if (offset != "") { t = offset }
Packit 6f02de
    printf " %10.10s", t;
Packit 6f02de
    t = inode; if (proto != "") { t = proto }
Packit 6f02de
    printf " %10.10s", t;
Packit 6f02de
    t = stream; if (name != "") {t = name }
Packit 6f02de
    printf "  %s", t;
Packit 6f02de
    if (state != "") { printf " %s)\n", state; } else { printf "\n"; }
Packit 6f02de
  }
Packit 6f02de
}