
awk は単語間の空白により出力を変更します。
例:「ローカルアドレス」はawk
それぞれローカルとアドレスを考慮します。
# netstat -antulp | awk 'NR>1'
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1115/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1397/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1271/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1473/master
tcp 0 0 0.0.0.0:55547 0.0.0.0:* LISTEN 1133/rpc.statd
出力は次のようになります。$4 $5 $6
Local Address Foreign Address PID/Program name
0.0.0.0:111 0.0.0.0:* 1115/rpcbind
0.0.0.0:22 0.0.0.0:* 1397/sshd
127.0.0.1:631 0.0.0.0:* 1271/cupsd
127.0.0.1:25 0.0.0.0:* 1473/master
0.0.0.0:55547 0.0.0.0:* 1133/rpc.statd
答え1
awkマニュアルから:
awkユーティリティは各入力レコードを一連のフィールドとして解釈する必要があり、デフォルトではフィールドは文字列ではありません。スペースいいえ新しいチーム数値。このデフォルトスペースそして新しいチームフィールド区切り文字は、FS組み込み変数または-F sepstringオプションを使用して変更できます。
「-F」オプションを使用するか、awkコードでFSオプションを設定して動作を変更できます。
awk 'BEGIN{FS="\t"} {print $1 $2 $3}'
netstatがどのように出力するかについては答えられません。 :)
答え2
努力する
netstat -antulp |\
awk 'NR == 1 { skip }
NR == 2 { printf "%s %-19s\t%s %-18s\t%s %s\n",$4,$5,$6,$7,$9,$10}
NR > 2 { printf "%-24ss\t%-24ss\t%s\n",$4,$5,$6 ;}'
どこ
- 最初の行はスキップしました。
- 2行目では、必要なフィールドを選択して列のサイズを変更します。
- 他のすべての行では、印刷フィールドが調整されます。
- もっと明確に見るために線を折りました。もちろん、1行でも構いません。