投稿

7月, 2012の投稿を表示しています

シェル操作課題への回答

http://d.hatena.ne.jp/Yamashiro0217/20120727/1343371036
シェル操作課題ということで bash のみでやってみた。CSVじゃなくてあくまでもカンマ区切りということでクォーティング処理とかは全くなし。ファイル名が与えられてないので、すべてhoge.logとします。
問1 このファイルを表示しろ $(< file) は個人的には好きではないのだけど、外部コマンドなしだとこれになる。
echo "$(< hoge.log)" 問2 このファイルからサーバー名とアクセス先だけ表示しろ IFS元に戻すの面倒なのでサブシェル内で。
(IFS=","; while read server t uid dest; do set -- "$server" "$dest"; echo "$*"; done < hoge.log) 問3 このファイルからserver4の行だけ表示しろ これまた念のためサブシェル内で。
(while read line; do [[ "$line" == server4,* ]] && echo "$line"; done < hoge.log) 問4 このファイルの行数を表示しろ これもやっぱりサブシェル内で。
(declare -i i; while read line; do let "i++"; done < hoge.log; echo $i) 問5 このファイルをサーバー名、ユーザーIDの昇順で5行だけ表示しろ うーーーーーーん、ソートを実装するのは面倒だけどしゃーない。ワンライナーは厳しいので適宜改行入りです。それと7bit前提。バブルソートとか書くの久しぶり。
function lt() {
  # return 0 if $1 < $2, else return 1
  local IFS=,
  local -a x y
  x=($1)
  y=($2)
  local -ir server=0
  local -ir uid=2
  [[ "${x[server]}" <…