SIer時代によく使ったワンライナー
Linuxや、Solaris、HP-UXなど、多くのOSには標準的なインストールでperlが入ってたり or インストールが容易ですね。
システムインテグレーションの仕事でサーバ構築やメンテなどを行いたいけど
本番環境ではツール類を気軽にインストールできない、というのはよくある話で、そんな時にもperlは頼もしい存在でした。
(最近はコンテナやサーバレスなどで状況は変わってきましたが。。。)
SIer時代によく使ったperlのワンライナーをいくつか思い出して紹介します。
簡易TCPサーバ
ネットワークの疎通確認として
サーバ側で任意のTCPポートでlistenして、クライアント側から接続確認したいことがあるでしょう。
perlの標準入力をソケットに吐き出しているので、ちょっとしたファイル転送にも使えます。
## 8888/tcpポートでサーバ起動
echo ok | perl -MIO::Socket -pe 'BEGIN{select IO::Socket::INET->new(LocalPort=>shift,Listen=>5,ReuseAddr=>1)->accept}' 8888
クライアントからはtelnet、curl、nc(netcat)コマンドなど、そこらへんにある適当なコマンドで接続します。
curl telnet://サーバのIP:8888
HEXダンプを復号する
tcpdumpや、その他のツールやログ出力などでHEXダンプがあったときに、ちょっと復号したいことがあるでしょう。
vim付属のxxd
コマンドを使う方法もありますが、元のダンプを含むテキストを不要部分除去などの加工をしつつ処理するのにperlを使ってました。
## HEXダンプされたファイル(in.dump)を復号
perl -ne 's/\s//g;print pack("H*",$_)' < in.dump > out
CSVやTSVを縦横回転
項目の多いcsv(カンマ区切りテキスト)ファイルやtsv(タブ区切りテキスト)ファイルを見る時に、
mysqlの\G
メタコマンドやpostgresqlの\x
メタコマンドのように、縦横を入れ替えて確認したいことがあるでしょう。
以下のようなエイリアスを作って
## csvファイルを回転するエイリアス
alias rotcsv='perl -nle '"'"'@c=split(/,/);$max=@c if $max<@c; for ($i=0; $i<$max; $i++) { $r[$i][$l] = $c[$i] }; $l++; END { for (my $j=0; $j < $max; $j++) { print join("\t", @{$r[$j]}) } }'"'"
## tsvファイルを回転するエイリアス
alias rottsv='perl -nle '"'"'@c=split(/\t/);$max=@c if $max<@c; for ($i=0; $i<$max; $i++) { $r[$i][$l] = $c[$i] }; $l++; END { for (my $j=0; $j < $max; $j++) { print join("\t", @{$r[$j]}) } }'"'"
以下の感じで使います。
マルチバイト文字の幅計算が面倒なので桁あわせ処理などはしてないけど、項目が多い場合はかなり読みやすくなります。
## 元のcsvファイル
$ cat in.csv
id,name,attribute
1,foo,administrator
2,bar,user
## 回転して表示
$ rotcsv < in.csv
id 1 2
name foo bar
attribute administrator user
良い年末を!
Author And Source
この問題について(SIer時代によく使ったワンライナー), 我々は、より多くの情報をここで見つけました https://qiita.com/take_3/items/28fc4478787d8cfe880d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .