アカウント名:
パスワード:
若いシステム管理者がサーバメンテナンスのスクリプトを書いていたので肩越しに覗いてみましたよ。
テキストエディタ(Windowsの)の機能をフルに活用し、大量のコマンドをコピペコピペ、置換置換…というように並べて作ってましたね。
萎えた。
そこは、あーしてこーして、awkをちょちょいと振りかければ10行で書けるだろ?その方が作るのも早いし簡単。
せめてエディタはviでやったほうが、編集も早いよ。マウスでドラッグして選択とかやってられんだろ。
というわけで、プログラムとまでは行かないにしろ、スクリプト言語くらいはシステム管理者は使えた方がいいと思う。
シェルスクリプトを書けるか書けないかで、仕事の効率は10倍くらい違うことも。ていか、シェルスクリプトも書けないのにシステム管理者をさせてるのが悪い。
Windowsサーバの管理者も、Power Shellとか使えたほうがいいんじゃないかな。
プログラミングに肝心なのは、格好良く書くことではない。解りやすく、確実に動作することである。その意味からすれば、可能ならば書き並べてループや複雑な手続きを使わない方が優れたプログラミンなのである。まあ、私は昔8ビットのアセンブラーでグラフィックの描画を作っていたけど100命令程度ならループのオーバーヘッドを避けるため書き並べていたのでそう思うのかもしれないが。
プログラマーとしてはプロでも、システム管理者としてはド素人とお見受けする。
>プログラミングに肝心なのは、格好良く書くことではない。>解りやすく、確実に動作することである。
格好良く書けと主張した覚えはないけど?でも、ソースコードを格好よく書くというのは、解りやすく確実に動作するにはとても重要で肝心なところ(二重に強調させてもらうが)。ちゃんと動いているように見えるからと言って、ぐちゃぐちゃなソースコードは、ちゃんと動くかすらわからない。
となると、それを知らないあなたはプログラマーとしても素人なのかもしれないな。
>その意味からすれば、可能なら
1回しか実行しないプログラムやクエリであれば、Excelで作ってしまうのが楽で確実です。
その手のものなら、UNIXではbashなどのシェル、WindowsならPowerShellを使う方が楽。コピペすら必要ない。例えば、bashなら
for user in $(cat users.txt); do echo "command_for_user -option1 -option2 $user"; done
とか。伝統的には、awkを使って、
awk '{print "command_for_user -option1 -option2 ",$1}' users.txt
とか。結果を一旦バッチファイルに保存して実行しても良いし、パイプで/bin/shに食わせてもいいね。もちろん、もっと現代的な言語で書いてもいい。PowerShellなら、
Get-Content .\users.txt | ForEach-Object {"command_for_user -option1 -option2 $_"}
私はawkとかperlも使いますが、Excelもよく使ってます。
shとかawkを使う欠点はデータフォーマットですね。元データが単純なテキストとは限らないんですよ。1カラム中に空白が入ったりする場合もあるのでshのforは無理。場合によっては改行を含むデータもあったりするし。
改行がないデータなら、CSVにして awk 'BEGIN{FS="\",\""}… とする手抜きも出来るけど、先頭と末尾の"は残るし、ダブルクオート有りと無しが混在するCSVには無力。それをマジメに処理しようとしたらもはやワンライナーは無理。
そういったデータの元はExcelだったりする場合が多いので、下手に「スクリプト系で
まず。
僕は、できる限りマウス操作は避けるようにしてる。
Excelの大半の操作はキーボードでも可能ですし
まったくExcelを使わない、って言っているわけではないです。キーボードショートカットは、Excelに限らず、よく使ってますよ。TeraTermにコピペするときだって、キーボードショートカットですし。
1カラム中に空白が入ったりする場合もあるのでshのforは無理。
その程度なら、「無理」は言い過ぎだと思いますよ。デリミタが決まってるんだったら、なんとで
> デリミタが決まってるんだったら、なんとでもなりますから。awkの「-Fデリミタ文字 」オプションとかあるんだし。
そのあたりは元コメントでも書いてますが、デリミタに何を使うかが問題。定番のCSV(コンマ区切り)の場合、"a","b","c"のような、各カラムがダブルクオートされてる場合、FS='","'にしておけば、とりあえず分割できますが、最初が「"a」、最後が「c"」になってしまいます。さらに、ExcelなんかのCSV出力はクオートが必要なときだけクオートするので、a,"b,c",dみたいなデータになっちゃいますから、もはやawkでワンライナーなんて不可能です。
echo '"a","b","c"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
> echo '"a","b","c"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
echo '"a","b,c","d"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
で破綻しますね。
echo '"a","b,c","d"'|awk -F \,\" '{print $1,$2,$3}'|tr -d \"
これはどう?
> echo '"a","b,c","d"'|awk -F \,\" '{print $1,$2,$3}'|tr -d \"> これはどう?
CSVには・全てのカラムがクオートされているとは限らない・ダブルクオート文字そのものは、ダブルクオート二つで表現されるといった変態さがありますので。
「a,"b,""c",d」という行を処理して、「a」「b,"c」「d」という3カラムの抽出が期待されます。awkのFS指定とtrで処理するのは無謀です。
awkとtrのパイプ実行に比べて可読性は低くなるけどsedでガッチリ書けということですね。 orz
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
システム管理者プログラミング (スコア:1)
若いシステム管理者がサーバメンテナンスのスクリプトを書いていたので
肩越しに覗いてみましたよ。
テキストエディタ(Windowsの)の機能をフルに活用し、大量のコマンドを
コピペコピペ、置換置換…というように並べて作ってましたね。
萎えた。
そこは、あーしてこーして、awkをちょちょいと振りかければ10行で書けるだろ?
その方が作るのも早いし簡単。
せめてエディタはviでやったほうが、編集も早いよ。
マウスでドラッグして選択とかやってられんだろ。
というわけで、プログラムとまでは行かないにしろ、スクリプト言語くらいは
システム管理者は使えた方がいいと思う。
シェルスクリプトを書けるか書けないかで、仕事の効率は10倍くらい違うことも。
ていか、シェルスクリプトも書けないのにシステム管理者をさせてるのが悪い。
Windowsサーバの管理者も、Power Shellとか使えたほうがいいんじゃないかな。
素人は君だよ (スコア:0)
プログラミングに肝心なのは、格好良く書くことではない。
解りやすく、確実に動作することである。
その意味からすれば、可能ならば書き並べてループや複雑な手続きを使わない方が
優れたプログラミンなのである。
まあ、私は昔8ビットのアセンブラーでグラフィックの描画を作っていたけど
100命令程度ならループのオーバーヘッドを避けるため書き並べていたのでそう思うのかもしれないが。
Re: (スコア:1)
プログラマーとしてはプロでも、システム管理者としてはド素人とお見受けする。
>プログラミングに肝心なのは、格好良く書くことではない。
>解りやすく、確実に動作することである。
格好良く書けと主張した覚えはないけど?
でも、ソースコードを格好よく書くというのは、解りやすく確実に動作するにはとても重要で肝心なところ(二重に強調させてもらうが)。
ちゃんと動いているように見えるからと言って、ぐちゃぐちゃなソースコードは、ちゃんと動くかすらわからない。
となると、それを知らないあなたはプログラマーとしても素人なのかもしれないな。
>その意味からすれば、可能なら
Re: (スコア:0)
> 1人のユーザの設定変更のコマンドを何行か書き、それを4999回コピーし、ユーザ固有の部分を目視しながらマウス操作でコピーして編集していく。
>
> 単純だけど、これは質の悪いプログラムだ。
> ちゃんと動くとは思えない。
> 5000人分のコマンドを手作業でなおしていくと、絶対にミスをする。
> これはとても優れているとは言えない。
> 時間もかなり大きくなる。
>
> それよりも、じっくりしっかりきれいに10行で書いたスクリプトを書き、それを使ったほうが圧倒的に速いし確実だし優れている。
1回しか実行しないプログラムやクエリであれば、Excelで作ってしまうのが楽で確実です。
例えばユーザIDをA列に格納し、A列を参照するコマンド(クエリ)をB列に書いてオートフィル。
あとはB列をコピペすれば完成。
Re: (スコア:2)
1回しか実行しないプログラムやクエリであれば、Excelで作ってしまうのが楽で確実です。
その手のものなら、UNIXではbashなどのシェル、WindowsならPowerShellを使う方が楽。コピペすら必要ない。例えば、bashなら
とか。伝統的には、awkを使って、
とか。結果を一旦バッチファイルに保存して実行しても良いし、パイプで/bin/shに食わせてもいいね。もちろん、もっと現代的な言語で書いてもいい。
PowerShellなら、
Re: (スコア:1)
私はawkとかperlも使いますが、Excelもよく使ってます。
shとかawkを使う欠点はデータフォーマットですね。
元データが単純なテキストとは限らないんですよ。
1カラム中に空白が入ったりする場合もあるのでshのforは無理。
場合によっては改行を含むデータもあったりするし。
改行がないデータなら、CSVにして awk 'BEGIN{FS="\",\""}… とする手抜きも出来るけど、先頭と末尾の"は残るし、ダブルクオート有りと無しが混在するCSVには無力。それをマジメに処理しようとしたらもはやワンライナーは無理。
そういったデータの元はExcelだったりする場合が多いので、下手に「スクリプト系で
Re: (スコア:1)
まず。
僕は、できる限りマウス操作は避けるようにしてる。
Excelの大半の操作はキーボードでも可能ですし
まったくExcelを使わない、って言っているわけではないです。キーボードショートカットは、Excelに限らず、よく使ってますよ。TeraTermにコピペするときだって、キーボードショートカットですし。
1カラム中に空白が入ったりする場合もあるのでshのforは無理。
その程度なら、「無理」は言い過ぎだと思いますよ。デリミタが決まってるんだったら、なんとで
Re: (スコア:1)
> デリミタが決まってるんだったら、なんとでもなりますから。awkの「-Fデリミタ文字 」オプションとかあるんだし。
そのあたりは元コメントでも書いてますが、デリミタに何を使うかが問題。定番のCSV(コンマ区切り)の場合、
"a","b","c"
のような、各カラムがダブルクオートされてる場合、
FS='","'にしておけば、とりあえず分割できますが、最初が「"a」、最後が「c"」になってしまいます。
さらに、ExcelなんかのCSV出力はクオートが必要なときだけクオートするので、
a,"b,c",d
みたいなデータになっちゃいますから、もはやawkでワンライナーなんて不可能です。
"a","b","c" (スコア:0)
echo '"a","b","c"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
Re: (スコア:0)
> echo '"a","b","c"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
echo '"a","b,c","d"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
で破綻しますね。
Re: (スコア:0)
> echo '"a","b","c"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
echo '"a","b,c","d"'|tr -d \"|awk -F \, '{print $1, $2, $3}'
で破綻しますね。
echo '"a","b,c","d"'|awk -F \,\" '{print $1,$2,$3}'|tr -d \"
これはどう?
Re: (スコア:1)
> echo '"a","b,c","d"'|awk -F \,\" '{print $1,$2,$3}'|tr -d \"
> これはどう?
CSVには
・全てのカラムがクオートされているとは限らない
・ダブルクオート文字そのものは、ダブルクオート二つで表現される
といった変態さがありますので。
「a,"b,""c",d」という行を処理して、「a」「b,"c」「d」という3カラムの抽出が期待されます。
awkのFS指定とtrで処理するのは無謀です。
Re:"a","b","c" (スコア:1)
awkとtrのパイプ実行に比べて可読性は低くなるけどsedでガッチリ書けということですね。 orz