コマンド

xargsの各オプションにおける引数の渡され方

普段xargsをよく使っているが、いつも -I オプションで引数をループさせる用途であることがほとんどなので、xargsはループ用のコマンドだと思いこんでいた。そのため先日、別の人のシェルスクリプトを読んだときに混乱してしまったのでまとめておく。 オプシ…

sh -cでコマンドを渡すときはシングルクォートを使う

KubernetesのPod内の環境変数が正しく設定されているかを確認しようとして、以下のようにしたところ、何も出力されなかった。 $ kubectl exec -it pod_name -- /bin/sh -c "echo $VAR_NAME" Podの中に入って確認すると正しく出る。 $ kubectl exec -it pod_n…

netcatのzero I/Oモードで疎通確認する

疎通確認をする際はcurlかwgetを使うことが多かったが、CKADの講座で講師がnetcatを使っているのを見て調べてみた。 netcatはサービスとの通信を確認できるコマンドであり、たいていのLinuxディストリビューションに同梱されている。KubernetesのPodに入って…

【bash】コマンドの戻り値をワンライナーで確認するときの注意

bashのスクリプトを書くとき、直前のコマンドの戻り値を見て条件分岐させたいことがよくある。戻り値は $? で取得できるのだが、このコマンドはいかなる場合でも直前のコマンドしか考慮してくれない。 例えば、以下は $? の誤った使い方である。 which aws |…

ファイルの1行目だけスキップして出力するコマンド

コマンドラインでCSVファイルを出力し、パイプで渡して処理を行うことが多いのだが、その際ヘッダ行が邪魔になることが多い。例えば以下のようなCSVファイルの場合、データ集計をする際にヘッダ行は必要ない。 $ cat filename.csv 会員番号,職業,スコア 1000…

大量のファイルを一気に消したい時はxargsを使う

先日、テスト実行で生成された大量のログファイルを消そうとしてうまくいかず、少し時間を使ってしまったので書いておく。仮に log0000.json から log9999.json まで10,000ファイルあるとする。 これらを一気に消そうと思い普通にrmを使ったところ、実行に失…

Brewfile作成の際に知っておきたいHomebrewまわりの機能

自分のdotfilesをメンテナンスするにあたって、他の人のを参考にしていたら、Brewfile上で知らないコマンドがいろいろ使われていたのでまとめる。これらをうまく使えば、インストール作業の自動化の幅が広がりそうだ。 Tap TapはHomebrewに登録されていない…

大容量のファイルをsplitコマンドで分割する

先日、数GBある大きなログファイルをテストに使う機会があったが、同じ日付のファイルが複数あるときのテストがしたかったのでファイルを適当に分割する必要が生じた。自分でファイルの一部をコピペしてもいいのだが、splitコマンドを使うと手軽に分割できる…

jqで少し複雑なjsonを検索+ソートする

udomomo.hatenablog.com 以前の記事で、jqを使って小さな困りごとを解決したことを書いたが、あれから実際にjqをいろいろな場面で使い始めている。とはいえ最初はけっこう試行錯誤したので、実際に使ったコマンドを忘れないように記録しておきたい。 jqとは …

きれいに整形されたjsonを1行に戻す方法

JSONを読みやすく整形するツールはいろいろなIDEやウェブサイトにあるが、元に戻すツールはあまりない。しかし、例えばJSON形式のデータを1行ごとに処理するシステムのテストデータを作るときなどは、可読性の高い状態でJSONを作っても、それを1行に戻さなけ…

コマンドラインでCSVをソートする方法まとめ

結合テスト後の結果比較や生データの処理などのために、数MBくらいのCSVを取り扱いたい時がある。なかでも、いろいろな処理を行う前に、たいていtimestamp等で各行をソートする必要があることが多い。エンジニアになる前はExcelを開いて頑張っていたけれど、…

cp -RTでディレクトリの中身だけ別のディレクトリにコピーする

先日、Railsチュートリアル用の環境をDockerで整えてみたが、そのときに詰まったのが「ゲスト環境で rails new して生成されたファイルを、ホスト環境との共有ボリュームにコピーする」ところ。ゲスト環境で /myapp (←自分のアプリ名)配下に生成されたファイ…

ファイル内の重複行を楽に探すunixコマンド

先日、大量のデータから完全に重複した行を探す処理をする機会があった。そのときはどうすればいいか手間取ってしまったが、コマンドを工夫すればすぐにできる内容だった。 以下の単純なサンプルログtest.txtを例に取る。 {"location_name": "title", "times…