csvからsqliteのtable schemaを抽出する

以下のようなデータからsqliteのcreate table時に必要なカラム名と型名のリストを抽出したい
data.csvとしておく

columnA,columnB,columnC,...
INT,INT,INT,...
1,2,3,...
11,22,33,...
...

抽出したいのはこれ

columnA INT, columnB INT, columnC INT, ...

まず必要なheader部分を取り出して、転置して、それを一行にすればよさそう
今回はmac上で動けばよいので転置にはrsコマンドを利用

$ cat data.csv | head -n2 | tr , ' ' | rs -T | paste -s -d, -

しかしこれだとカラム数がとても多いデータの場合にうまくいかないことがわかった
試しに確認用のデータをrsで変換してみる

$ seq -s' ' 1 300 | rs -T
1 284
2 285
...
282
283

こんな結果になった。想定どおりなら300まで一行ずつになるはずが、283の後は2列目に表示された。
数を1000とかに大きくすると、283の行のところでまたさらに次の列に表示されるようになる。
調べてみるとどうやら283の3がちょうど1023文字目になっていることがわかった。おそらく210以上の文字を横に並べては処理できないようになっていると考えられる。なのでちょっと方法を変えることにした。

$ cat data.csv | head -n2 | tr , '\n' | rs -t 0 2 | paste -s -d, -

一度縦にすべてを並べてからそれをrsで2列に並べるよう指定した。これなら数を大きくしてみても欲しかった結果が得られた。
最初のdata.csvを変換してみると以下のような結果になる

columnA  INT,columnB  INT,columnC  INT

間の空白が気になる場合はpasteの後にsedで調整

sed -e 's/[[:space:]][[:space:]]*/ /g'

phpのexecでwrite error: Broken pipe

exec('ls | head -n1")

phpでこのようにしたら以下のエラーが出た

write error: Broken pipe

ただし処理自体は正しくできているようで、エラーが出るだけのよう

bashで同じように実行しても特にエラーは出ない ググってみるとこんなのがヒット https://stackoverflow.com/questions/11296809/how-to-avoid-ls-write-error-broken-pipe-with-php-exec どうやらpopenで開いたlsの出力を読み取らずに閉じることで同じエラーが出るとのこと

また、こんなページも http://qiita.com/kkdd/items/f9829af2fbb9c3c980da phpやlsに関係なく出力が長い場合にBloken pipeのエラーは出るよう

lsの出力を読み取りきらずにheadの処理が終わってしまった場合に、lsの出力先がなくなってこのようなエラーが出るものと推測される。私の環境だとbashでは出ないが、それはシグナルの処理をうまくやってくれているとかなのか。phpだとそのあたりの処理を途中で拾って何かやってるためにエラーになってしまうとか。

とりあえず2>/dev/nullをls側につけることでエラーは握りつぶせるかつ処理は正常に行われているのでよしとする。

xcodeで"Could not locate device support files"

xcodeをupdateした後、runした際にタイトルのようなエラーが出たのでメモ

エラーメッセージを見るとxcodeが対象のiphoneのOSをversionをサポートしてないということのよう。 Xcode.appの下にあるDeviceSupportに使いたいOSのversionが含まれていないとこうなるらしい。

古いxcodeから必要なversionを含むディレクトリを持ってくればOK。コピーしてもいいが以下のようにリンクを貼るのが楽。

$ ln -s /Applications/Xcode-7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

参考

ios - Xcode: Could not locate device support files - Stack Overflow