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