関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。知ってるとちょっと得するかもしれないTips。
ss コマンドとか ps とか df とかを実行すると一行目にヘッダー行が出てきて、その後にデータが出力されます。
これを並び替えたりすることは結構よくやるのですが、ヘッダー行も付けておきたい場合もあります。
そういうとき、コマンドラインにこなれている人だったら、AWKつかって
$ ss -ltn | awk 'NR==1 {print; next} NR>1' | sort -t: -k2 -n
ってやれば出来るよ!ってなるかもしれませんが、AWKをスラスラ使える人ってそんなに多いわけじゃないですね。
NRとかってパパっと出るまで使い込んでる人もそこまで多くないかと。
上と同じことを AWK 使わずにやる場合は以下のようにも出来ます。
$ ss -ltn | (read -r header; echo "$header"; sort -t: -k2 -n)
これも同じようにヘッダー行は残したままでデータ部分をローカルポートで並び替えて出力してくれます。
パイプの後ろがキモで以下のような挙動となります。
read -r headerで入力の最初の一行目を取り込んでheaderという変数に格納echo $headerでさっき格納したヘッダー行を出力- ストリームに残っている2行目以降をsortコマンドで食べさせて並び替えて出力
という動きになります。
個人的には AWK つかうより理解しやすいと感じてますので、よくこっちを使います。
このやりかた、結構応用が効いて、例えば
# ヘッダー残しながら、先頭5行分だけ出力 $ ss -ltn | (read -r header; echo "$header"; head -n 5) # ヘッダー残しながら、末尾5行分だけ出力 $ ss -ltn | (read -r header; echo "$header"; tail -n 5)
のように出来ます。結構便利です。
# psコマンドの出力をメモリ使用量でソートして先頭5行分のみ出力 $ ps aux | (read -r header; echo "$header"; sort -k4 -rn | head -n 5) # dfコマンドの出力を使用率でソート $ df -h | (read -r header; echo "$header"; sort -k5 -rn)
参考情報
コマンドライン絡みでいつもお世話になっているサイトさんたち。
https://www.gnu.org/software/coreutils/manual/www.gnu.org
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。