コピペコードで快適生活

明日使えるソースを自分のために

{print $1}しか知らない自分のためのAWKメモ

awkのことをきちんと知っておこうと思って、下記を読ませていただいたときのメモ書きです。
http://antibayesian.hateblo.jp/entry/2014/09/15/162605

条件マッチする行を抽出

# 10にマッチする行を抽出する。
awk /10/ trees.txt

# 両方の条件を満たす行を抽出する。
awk "/10/ && /16/" trees.txt

# 片方どちらかでも条件を満たした行を抽出
awk "/10/ || /16/" trees.txt

# 10を含まない行を抽出
awk !/10/ trees.txt

# 1列目に10が含まれる行を抽出
# ※$0には行全体が入っている
awk $1~/10/ trees.txt

# 1行目が10未満の行を抽出
awk "$1<10" trees.txt

# 12~14間の数値が含まれる行を抽出
awk /12/,/14/ trees.txt

組み込み変数を使って抽出

組み込み変数

NR # 現在読み込んでいる行数
NF # 現在読み込んでいる行の列数
-F # ファイルセパレータ指定。デフォルトは半角スペースかタブ。,を指定することでCSVファイルに対応
length # 現在読み込んでいる行の文字数

# CSVファイルから取り出す
awk -F , $1~/10/ trees.txt

# 1~3行目を取り出す
awk "NR<=3" trees.txt

# 列数が2未満の行を取り出す
awk "NF<2 {print NR, $0}" trees.txt

# 空行以外を取り出す
awk "length>0" trees.txt

printを使ったデータ加工

# 1列目だけ
awk "{print $1}" trees.txt

# 1列目*2列目の計算結果を出力
# ※文字列での計算は0になる
awk "{print $0,$1*$2}" trees.txt

# 行数付与
awk "{print NR, $0}" trees.txt

# $0に含まれる8をxxxに置換して出力
awk "{gsub(8,\"xxx\",$0);print $0}" trees.txt

シェルの便利コマンドメモ(cat, paste, join, comm)

処理対象ファイル

a.txt

1. abc
2. def
4. xyz

b.txt

1. 123
4. xyz
5. 456

cat

ファイルを結合する

$ cat a.txt b.txt
1.abc
2.def
4.xyz
1.123
4.xyz
5.456

paste

ファイルを横に並べて結合する

$ paste a.txt b.txt
1.abc   1.123
2.def   4.xyz
4.xyz   5.456

join

同じキーをもつ行を結合する

$ join a.txt b.txt
1. abc 123
4. xyz xyz

comm

ファイルの共通点を比較
左から a.txtのみ、b.txtのみ、両方の順

$ comm a.txt b.txt
        1.123
1.abc
2.def
                4.xyz
        5.456

ソフトウェアデザイン2017年1月号Unixコマンドライン探検隊を参考にさせていただきました。

ファイル、またはディレクトリだけに chmod するシェルのメモ

ファイルの場合

find . -type f -print | xargs chmod 644

ディレクトリの場合

find . -type d -print | xargs chmod 755

Javascriptで配列をリング状に扱えるといいな

Javascript(ES6)でループするようなスライダーとか作るときに、配列がリング状に扱えるといいなと思って書いてみました。
配列を拡張するとかではなくて、あくまで配列のIndexを取得するだけのシンプルな作りです。

export default class RingNums {
  constructor(length) {
    this.length = length;
  }

  lineList(base, left, right) {
    var list = [];
    var index = this.indexOnRing(base + left);
    var times = (left * -1) + 1 + right;

    for (var i=0; i<times; i++) {
      list.push(index);
      index = this.next(index);
    }

    return list;
  }

  next(index) {
    return this.indexOnRing(index + 1);
  }

  prev(index) {
    return this.indexOnRing(index + 1);
  }

  indexOnRing(index) {
    let length = this.length;

    if (index % length == 0) {
      index = 0;
    } else if (index < 0) {
      index = length + (index % length);
    } else if(index >= length) {
      index = index % length;
    }
    return index;
  }
}

SASSをwebpackでコンパイルした時の設定メモ

SASSをwebpackを使ってコンパイルしたときの設定メモです。

npmモジュールのインストール

モジュールはこれだけ必要でした。

SASSのファイルは、node-sass -> sass-loader -> css-loader -> style-loader と渡されてCSSとなり、extract-text-webpack-pluginで、ファイルとして切り出しを行うようです。

npm init
npm install --save-dev webpack webpack-dev-server 
npm install --save-dev node-sass style-loader css-loader sass-loader
npm install --save-dev extract-text-webpack-plugin

webpack.jsの記述

エントリーポイントは src/css/index.scss、出力先は、dist/css/app.css としました。
includePaths[]を指定することで、node_module以下にあるsassもimportできるようにしています。

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
// 略
module.exports = [
  {
    // 略
  },
  {
    context: __dirname + '/src/css',
    entry: {
      app: './index.scss'
    },
    output: {
      path: __dirname + '/dist/css',
      filename: './[name].css'
    },
    module: {
      loaders: [
        {
          test: /\.scss$/,
          loader: ExtractTextPlugin.extract({
            fallback: 'style-loader',
            use: ('css-loader?-url&minimize&sourceMap!sass-loader?outputStyle=expanded&' +
               'includePaths[]=' + path.resolve(__dirname, './node_modules'))
          })
        }
      ]
    },
    devtool: 'source-map',
    plugins: [
      new ExtractTextPlugin('./[name].css')
    ]
  }
];

下記参考にさせていただきました。
http://qiita.com/yaaah93/items/f8293846134efc83634a
http://qiita.com/nicchi__1985/items/e30e73de6d8443909537

CentOS6系にMySQL5.7を一撃インストール

CentOS6系にMySQL5.7をインストールした時のメモ書き。

インストール時に発行される初期パスワードをシェルで取り出してログイン。
その後パスワードを仮のものに変更(これを一度やらないと色々操作できない)。
パスワード制約をゆるくして、再度わかりやすいワードで設定し直しました。

function install {
  echo installing $1
  shift
  yum -y install "$@" >/dev/null 2>&1
}
yum install -y https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm >/dev/null 2>&1
install "MySQL" mysql mysql-server mysql-devel
chkconfig --add mysqld
chkconfig --level 345 mysqld  on

echo "Start and Initialize MySQL"
service mysqld start >/dev/null 2>&1

mpw=$(cat /var/log/mysqld.log | grep "A temporary password is generated for root@localhost" | awk '{print $NF}')
mysql -uroot -p$mpw --connect-expired-password <<SQL
-- CONFIG PASSWORD POLICY --
SET PASSWORD FOR root@localhost=password('passwordPASSWORD@999');
SET GLOBAL validate_password_length=4;
SET GLOBAL validate_password_policy=LOW;
-- SET ROOT PASSWORD --
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
-- REMOVE ANONYMOUS USERS --
DELETE FROM mysql.user WHERE User='';
-- REMOVE REMOTE ROOT --
DELETE FROM mysql.user
WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- REMOVE TEST DATABASE --
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- RELOAD PRIVILEGE TABLES --
FLUSH PRIVILEGES;
CREATE USER 'vagrant'@'localhost' IDENTIFIED BY 'vagrant';
GRANT ALL PRIVILEGES ON *.* to 'vagrant'@'localhost';
SQL

作成したユーザは下記になります。

ID root@localhost
PW root

ID vagrant@localhost
PW vagrant

リポジトリの参照場所
https://dev.mysql.com/downloads/repo/yum/

CentOS6系にRed5サーバを構築する

Webプレイヤーの動作検証のためrtmpのストリームが必要になったので構築してみました。

インストー

cd /usr/local/src
wget https://github.com/Red5/red5-server/releases/download/v1.0.9-RELEASE/red5-server-1.0.9-RELEASE.tar.gz
tar -xzvf red5-server-1.0.9-RELEASE.tar.gz
mkdir -p /usr/local/app/
mv red5-server /usr/local/app/.
cd /usr/local/app/red5-server/

localhost以外で使う場合はアクセス制限の解除をする

vim /usr/local/app/red5-server/webapps/installer/WEB-INF/red5-web.properties

<<<<< webapp.virtualHosts=localhost, localhost:5080
>>>>> webapp.virtualHosts=localhost, localhost:5080, 192.168.11.110, 192.168.11.110:5080

起動スクリプト作成

vim /etc/init.d/red5-server

red5-server

#!/bin/bash
# For RedHat and cousins:
# chkconfig: 2345 85 85
# description: Red5 flash streaming server
# processname: red5-server

PROG=red5
RED5_HOME=/usr/local/app/red5-server
DAEMON=$RED5_HOME/$PROG.sh
PIDFILE=/var/run/$PROG.pid

# Source function library
. /etc/rc.d/init.d/functions

[ -r /etc/sysconfig/red5 ] && . /etc/sysconfig/red5

RETVAL=0

case "$1" in
  start)
  echo -n $"Starting $PROG: "
  cd $RED5_HOME
  $DAEMON >/dev/null 2>/dev/null &
  RETVAL=$?
  if [ $RETVAL -eq 0 ]; then
    echo $! > $PIDFILE
    touch /var/lock/subsys/$PROG
  fi
  [ $RETVAL -eq 0 ] && success $"$PROG startup" || failure $"$PROG startup"
  echo
  ;;
  stop)
  echo -n $"Shutting down $PROG: "
  killproc -p $PIDFILE
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
  ;;
  restart)
  $0 stop
  $0 start
  ;;
  status)
  status $PROG -p $PIDFILE
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $0 {start|stop|restart|status}"
  RETVAL=1
esac

exit $RETVAL

起動設定

chmod 755 /etc/init.d/red5-server
chkconfig --add red5-server
service red5-server start

続きはこちらをご参照で。。
http://centos.server-manual.com/centos6_red5.html

参考にさせていただきました。
http://centos.server-manual.com/centos6_red5.html
http://www.84kure.com/blog/2016/02/03/red5-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-centos-7/
https://stackoverflow.com/questions/35332121/error-in-red5-net-status-netconnection-connect-failed#comment58416312_35349632
http://qiita.com/alingogo/items/1176a7d42b9c0b36515c