んなもんさあ、grepしてsedしてawkすれば簡単じゃん
ずっとgrepしてawkしてsortしてuniqしてたけど、grepいらなかったんだなとプログラミングawkを読んで知ったとこでした
私はきっと無能ですけど英語で落ちてたブレインダンプス記憶しまくりでMCSEホルダーでIT派遣で飛ばされた先で月80万稼ぎつつチョロチョロっとLinuxさわっとります
上司がもっと無能なので助かるわまじで
上司は多分○nxへのログイン方法も知らないしgrepはおろかcpもmvもchmodもtailもheadも知らないのよね >いつかこのスレを読むかもしれない初心者へ
やりたい事が出来れば書きやすい様に書けば良い。効率を考えてリファクタリングするのも良いが、書くのがその場限りのワンライナーならその必要は無いだろう。後で再利用するかもしれないスクリプトを書くのならば読んだ時に直感的に分かりやすい表現にすると良い。UNIX的な思想でシンプルなコマンドの組み合わせで書くと後から読んでも分かりやすい事が多いが、ただシンプルなコマンドを使えば分かりやすい訳でもない。
このスレの話題を例に説明する。
ここでの"やりたい事"→「全てのユーザーのプロセスからrunnerのプロセスIDを抜き出す」
やり方は色々ある
ps -ef | grep runner | awk '{ print $2 }'
ps -ef | awk '/runner/{ print $2 }'
ps -ef | grep runner | tr -s ' ' | cut -d' ' -f2
awkが使える環境であれば一番上のやり方が"思考"の順と後述する"試行"の順と合っていて自然。
二番目はより短く書ける。これがぱっと思い付くならこの書き方もいいだろう。
三番目はシンプルなコマンドの組み合わせだが、cutの為にtrで連続した空白を一つにまとめているのが思考の順番と合わないため理解し難い。
最後に"やりたい事"を実現するための過程を、試行も含めて書いてみる。
まずはプロセス情報を取り出す
→ps -ef (PIDが欲しいだけなら-fは要らないが、定型的に付けておく)
↑プロセスが沢山出る
欲しいのはrunnerの情報だけ
→ps -ef | grep runner
↑意図しないプロセスが紛れてないのを確認
PIDが欲しい(空白区切りで2列目)
→ps -ef | grep runner | awk '{ print $2 }'
↑所望の結果が得られる
上記はあくまで例で、慣れてくればこの様な試行を省略して最初から最後のワンライナーで書けるようになる。慣れるまで書きやすく読みやすくを意識して沢山書くと良い。
長文最後まで読んでくれた方、ありがとう。 おつかれ
パイプの数が多いと自己満足に浸れるので俺はgrep + awk派だなw
でもさ、psの出力ならPIDは$2じゃなくて$1では? そんな中ガチプログラマはffftpでマイpcに落としてエクセルでオートフィルタするのであった。 たぶん
ロムってるやつはたくさんいるから大丈夫なのか? 手を出してくれよずっと待ってんだから
スシボーイズどうですか?
( ゚ ⊇ ゚)‘◇‘)∂ω∂)´u`)´ェ`)ゆっくりしなくていいから無期限にしてくれ