スペースで区切られたログの後ろから2番目の値を取得するシェルスクリプト

注意事項

概要

わけあって必要になったので自分がコピペする用のメモ。

スペースで区切られたログの後ろから2番目の値を取得する処理をシェルスクリプトで書く。
汎用的に言い換えると、「ログの1行を○○の文字で分割して、分割した後ろから○○番目の文字列を取得する」。

環境:
 bash

やりたいこと

・とあるミドルウェアが出力するログファイルで、スペースで区切って後ろから2番目の文字列を取得したい。
高級言語は使えない環境だったのでbashで書く。
・対象のログファイルは圧縮されたgzファイルで、同一フォルダに大量にある前提。
 →なのでファイル指定はコマンドライン引数でワイルドカードを使って実現することにした。
・1つ1つのファイルが大きいかったのでreadコマンドを使ってみた。

スクリプトのコード

(補足) gzファイルのログが前提なので、
macの場合はgzcat、linuxの場合はzcatコマンドを使うけど
プレーンテキストを読むのならcatで。

#!/bin/bash

#コマンドライン引数で指定されたファイルの数だけループ
for arg in "$@"
do
    #圧縮ファイルを解凍して1行ごと処理
    gzcat $arg | while read str
    do
        #スペースで分割して配列に格納
        array=(`echo $str | tr -s ' ' '\n'`)
        #配列の後ろから2番目の要素番号を取得
        index=$((${#array[@]}-2))

        echo ${array[$index]}
    done
done

実行コマンド例

hoge.sh がシェルスクリプトのファイルで、ログファイルとしてtmp1.gzとかtmp2.gzとかがスクリプトファイルと同じフォルダに存在する場合の例。

# bash ./hoge.sh tmp*.gz

ガラケーの連絡先データをカードケータイへ移行する案

概要

ドコモのカードケータイにも連絡先(電話帳)は当然あるが、その小ささ、画面表示、入力のし辛さゆえ、何十人分も手打ちで入力していくのは困難を極める。カードケータイに Bluetooth で連絡先データを送信し読み込むことはできるので、カードケータイ乗り換え前の端末が Bluetooth を使えるのであれば、まだ少しは楽ができる。

しかしガラケーから乗り換える人の場合、Bluetooth が使えない場合が多いと思われる。
その上、SIMカードが 標準SIM だったり microSIM だったりして、カードケータイ用にSIM を nanoSIM に変更するため、SIMカード経由でのインポートもできない場合が多い。
今回行った、ガラケーからカードケータイへの連絡先データ移行方法を記載する。

なお、本記事記載中に他にもっといい方法に気付いた。Bluetoothが不要な方法もあるので、まずは読み飛ばして最後あたりに記載の簡単な方法で試して欲しい。


今回使った機器:
 変更前機種:P705i (標準SIM)
 変更後機種:カードケータイ
 連絡先データ中継用:iMac(macOS Mojave) ※Bluetoothが使えるPC等なら何でもいい

作業の流れ

Bluetooth が使えないガラケーからの連絡先データ移行を想定して記載するが、Bluetooth が使えるガラケー/スマホからの移行でも同じことができるはず。
その場合は、PCをそのガラケー/スマホに読み替えて、2.から始めれば同様のことができる。

#しかし、移行前の端末がBluetoothを使える、または SIMカード
# nanoSIM なら、もっと簡単にインポートできる(はず)ので、その場合は
# このページ下部で記載している「もっと楽なインポート方法(想定)」を参照。
# 他にも、SIMの変換アダプタを持っている人も、もっと楽してインポートが可能と思われる。


1. ガラケーから Bluetoothが使えるPCに、連絡先データ(VCFファイル)を転送する。
2. カードケータイとPCとで Bluetooth のペアリング設定を行う。
3. PCからカードケータイへVCFファイルを転送する。
4. カードケータイで、VCFファイルからデータをインポートする。


1. ガラケーからPCへの連絡先データ転送

まずはとにかく、連絡先データ(VCFファイル)を Bluetooth が使える端末(PC等)に転送できればいい。
それは転送元の機種、転送先の機種によって方法は異なるので、それぞれの機器の説明書等を参考にしてほしい。

自分のガラケーの場合、マイクロSDカードに連絡先データを保存できたので、全ての連絡先データを一旦マイクロSDカードに保存し、iMacに持っていった。

P705iではこんな感じで保存できる。ただしまとめて保存できず、1件1件保存しなければいけなかった...。
f:id:nashikachi:20181124004347p:plain:w250


2. カードケータイとPCとの Bluetooth ペアリング

Bluethooth で連絡先データをカードケータイへ送信するので、事前にペアリングをしておく必要がある。

カードケータイでは、トップメニューから
「設定」>「無線とネットワーク」>「Bluetooth」で、
Bluetooth を ON にできる。


なお、カードケータイのBluetoothを見つけやすくするため、Bluetooth時の名前の変更をお勧めする。名前の変更は、下図のアイコンから
f:id:nashikachi:20181124010152p:plain:w250

「この端末の名前を変更」で変えることができる。
f:id:nashikachi:20181124010503p:plain:w250

カードケータイ、もしくはPC側でお互いのBluetoothが表示されるのでそれを選択し、ペアリングを完了させる。
ペアリングができれば下記のようになる。
f:id:nashikachi:20181124011121p:plain:w250

あと、必要かどうか確認できていないが、念のため下記の設定も行う。
ペアリングされたデバイスの横の歯車のアイコンを選択し、その先の画面で、「連絡先の共有」のチェックボックスにチェックを入れておく。チェックボックスにチェックを入れたら、画面右上のチェックボタン(決定ボタン)で設定を適用する。


3. PCからカードケータイへVCFファイルの転送

ペアリングができたら、PCからカードケータイへ連絡先データを転送する。

今回はMacを使っていたので、Macでの送信方法を記載する。

「システム環境設定」>「Bluetooth」の画面で、下記のように「ファイルをデバイスに送信」を選択する。
 ※「KY-01L_TNB」がカードケータイ
f:id:nashikachi:20181124012451p:plain:w300

送信用のFinderが開くので、送信するVCFファイルを選択し、送信ボタンを押す。
 ※この時、カードケータイは事前にロックを解除しておいた方がいい。
  ※もしかすると、この時点でカードケータイの連絡先で
   「別のデバイスからインポートする」を選択していれば、
    以降の項目はしなくても良かったかもしれない。

f:id:nashikachi:20181124012923p:plain:w260

するとカードケータイ側で、「ファイルを受信しますか?」と表示されるので、OK を選択する。
f:id:nashikachi:20181124013203p:plain:w250

カードケータイの画面下の方に転送中のファイル名が次々表示されるので、転送が終わるのを待つ。


4. VCFファイルからデータをインポートする。

カードケータイへのVCFファイルの転送が完了した後、連絡先へインポートする。

Bluetoothの画面の下記アイコンを選択し、
f:id:nashikachi:20181124010152p:plain:w250

「受信済みファイルを表示」を選択する。
f:id:nashikachi:20181124024631p:plain:w250

先ほどPCからカードケータイへ送信した連絡先データ(VCFファイル)が表示される。
f:id:nashikachi:20181124024456p:plain:w250

残念ながらこれらVCFファイルをまとめてインポートする方法が見つからなかったので、1つ1つインポートする。
インポートするVCFファイルを選択すると、インポートするかを聞かれるのでOKを選択する。
f:id:nashikachi:20181124024436p:plain:w250

処理が完了すると、カードケータイの連絡先へデータがインポートされている。
これを全VCFファイル分繰り返す。

以上。


もっと楽なインポート方法(想定)

Bluetoothが使えない & SIMカードがnanoSIM ではないガラケーからの乗り換えで、しかもSIMの変換アダプタを持っていないため上記の方法でインポートしたが、そうでない場合、もっと楽なインポート方法が想定される。

■移行前の端末のSIMカードが nanoSIM の場合。またはnanoSIM用変換アダプタがある場合

カードケータイの連絡先は、SIMカードから連絡先をインポートできる。
つまり、移行前の端末の連絡先データをSIMカード上に保存して、カードケータイでSIMカードからインポートすれば、ややこしいこともせずにできる。

SIMからインポートする方法は以下の通り。
f:id:nashikachi:20181124032447p:plain:w250

f:id:nashikachi:20181124032602p:plain:w250

f:id:nashikachi:20181124032701p:plain:w250


もし、移行前の端末のSIMカードが 標準SIM か microSIM だったとしても、nanoSIMを標準SIMかmicroSIMにするアダプタがあれば、カードケータイのnanoSIMを変換アダプタに噛ませて移行前のケータイにさし、連絡先をnanoSIMにエクスポートできれば、その後カードケータイで上記手順でインポートできる。

■移行前の端末がBluetoothを使える場合 (または、3.からの改善?)

下スクショの通り、「別のデバイスからインポートする」という項目がある。
f:id:nashikachi:20181124033343p:plain:w250

選択すると、Bluetoothバイスを選択する画面になる。ここから先は使ったことがないので動作は想定だが、実はここからインポートしていれば「4. VCFファイルからデータをインポートする。」は自動で行われて不要だったかもしれない。

後から説明書を読んで連絡先アプリのインポート機能に気付いたが、初めから読んでおくべきだった。


まとめ

かなり手間のかかる移行方法を記載したが、どうやらもっと楽にできたかもしれないことに気付いた。
まずは「もっと楽なインポート方法(想定)」の方法から試した方がよさそう。
一番楽なのは、移行前の端末でSIMカードに連絡先を保存して、カードケータイ側でSIMカードから連絡先をインポートする方法だと思う。

ガラケーからカードケータイへ乗り換える際のちょっとした注意点

概要

ドコモでガラケーからカードケータイに機種変更した際に、ドコモのメールアドレス(@docomo.no.jp)を使う手段が無くなってしまう事態に陥った、と思い込んだ。それはブラウザ版ドコモメールを利用可にすることができないという理由だったが、最終的に解決した。
少し考えれば簡単に解決できる問題でわざわざ記事に起こす必要もない話だが、ドコモショップの説明もイマイチで余計に混乱して面倒なことをしてしまっていたので、同じことに悩まされる人がいないようメモする。

機器:
 変更前機種:P705i
 変更後機種:カードケータイ

前置き

使ってるガラケーもといフィーチャーフォンが多分もう10年選手で、こんな感じでいい加減ガタがきており前から機種変更を検討していた。
f:id:nashikachi:20181123202446p:plain:w200

プラン含め個人的にいい感じの機種変更先がなく困っていたが、そんな折にちょうどいい感じの端末が発表された。
www.nttdocomo.co.jp

電話ができて、安いプランなら約2000円/月で、かつ小さい、という求める要素をほぼ満たしたものだったので、乗り換えを決めた。恐らく同様の考えで乗り換えた/乗り換えようとしている人は少なくないのではと思う。

このパターンで乗り換える場合の多くの人は、その後のドコモのメールアドレスを使う手段で少し悩むかもしれない。

ドコモのメールアドレスを利用する手段がなくなる?

カードケータイは、メッセージ(SMS)は使えるがメールを扱う機能は備えていない。そのためカードケータイでは元々メールは扱えず、どうしても使いたいならブラウザ版ドコモメールにログインして使うことになる。
そこはカードケータイを購入する人は理解しているはずなので問題ではない。
(自分は契約直前まで知らなかった...)

ブラウザ版ドコモメールはガラケーの状態では利用できないので、カードケータイに替える際に利用できるようになれば、一応メールは見ることができるのでそれでいいかと考えた。
機種変更手続き中、念のため乗り換えによってブラウザ版が使えるようになるかドコモショップの人に聞いたら、よく分からなかったらしく、電話で問い合わせていた。その後、予想してなかった回答が返ってきた。

android端末か、ドコモ販売のiPhoneに一旦SIMを差して、ブラウザ版ドコモメールを利用できるよう設定する必要がある」

若干ほんまかいなと思いつつも、それが事実ならガラケーからカードケータイに乗り換える人のほとんどのメールアドレスが宙に浮いた状態になるやんけと素直に受け止めてしまった。
が、それがまずかった。その回答自体が実は間違っていた。

カードケータイのブラウザからでも設定はできた

そもそもブラウザ版ドコモメールを利用できるにするには、dアカウントを作って、「ドコモメール」の契約のSIMがささった端末でdアカウントにログインして、ブラウザ版の利用設定をONにする必要がある。
詳しくはここを参照。

ガラケーは「ドコモメール」ではなく「SPモードメール」だから、ガラケーの時点ではその設定はできない。
カードケータイに乗り換えて「ドコモメール」になってからその設定をする必要があるが、カードケータイではその設定ができない、だからandroid端末かドコモ販売のiPhoneに一旦SIMを差してその設定をしなくてはいけない。
という理屈で上記の回答が返ってきたわけだが、よくよく考えると、カードケータイでもその設定は実はできた。

つまり、別にandroid端末やiPhoneにSIMを差し替えて、その設定をする必要はなく、カードケータイのブラウザから普通に設定すればよかった。カードケータイのブラウザがアレなので非常にやり辛いが、できないことはなかった。

f:id:nashikachi:20181123224948p:plain:w200
※カードケータイのスクショはカラーで取れる
WiFiのマークが出ているが、本来この画面はWiFiを切ってアクセスする必要があるので注意


それに気付くのが遅くて、結局iPhoneからその設定を行った。
たまたまドコモ販売のiPhone5Sを持っていたのでそれにSIMをさして設定を行ったが、持っていたことで余計に面倒なことをしていたように思える...。
(なお、SIMフリーiPhoneだとドコモの電波拾えるか分からないから「ドコモ販売の」でと言われたが、別にドコモ販売でなくても大丈夫な気もする)

まとめ

ガラケーからカードケータイに乗り換える場合、android端末かドコモ販売のiPhoneがないとドコモのメールアドレスを利用する手段がなくなる(ブラウザ版の利用ができない)、という趣旨の説明を受けたが、別にそんなことはなくカードケータイ上でブラウザ版の利用設定はできる。
自分のように別の端末に差し替えて設定するような面倒なことはしなくてもいい。


ちなみにカードケータイでブラウザ版ドコモメールを使うのはかなりしんどい。
これで1画面フルサイズ。
f:id:nashikachi:20181123225902p:plain:w200

あと、macOSに対応していないことに気付いた。Windows経由でないとスクショが転送できない...。

Xcode 9 & Swift で macOS のサンプルプログラム作成

注意事項

概要

Xcode 9 & Swift で macOSGUIアプリの初歩的なサンプルプログラムを作る。

環境:
 Swift 4.0.3
 Xcode 9.2

前置き

いつの間にか時代は Objective-C から Swift になっていて、Xcode も 9 まで進んでいた。Objevtive-Cから移行しようとしたものの、Interface Builder を使って Swift で GUI アプリケーションを作る方法が Obj-C とは少し違うようで悩んだ。ググっても iOS 向けばかりで、Xcode9+Swift4で macOS 向けに1からチュートリアルしてくれるところが見つからない。少し分かってきたので、初歩的なGUIサンプルの作り方をここにメモする。

今回作るサンプルプログラム

ボタンをクリックすると、テキストボックスに入力された文字が下部に表示されるプログラム。
f:id:nashikachi:20180212173131p:plain

作り方

書く方が手間だったので試験的に動画で。

※文字が読みにくい場合は解像度を上げて再生して下さい

バインディングが楽になっていた

今までUIの部品とソースコードバインディングする場合、事前にソースコード側に IBAction や IBOutlet を記載しておく必要があったが、コードを記載していない状態から直接ソースコードバインディングできるようになっていた。これはかなり便利。
今回一番困っていたのは Swift で Interface Builder を使う場合のバインディング方法だったので、これによってめでたく解決。