Linuxコマンドのメモ

よく使うものをリストアップしてみました.創薬は直接関係しません,データ処理等で多少は参考になるかと..

findコマンド関連

ある文字列を含むファイルを検索

$ find . -print0 | xargs -0 grep strings

ファイル名に文字列を含む/含まないファイルを検索

$ find . -name “*strings*” -print
$ find . ! -name “*strings*” -print

実行可能ファイルを検索してbinディレクトリへコピー

$ find . -type f -executable -exec cp {} bin \;

ファイルのフルパスを取得

$ find `pwd` -maxdepth 1 -type f
$ ls -dF `pwd`/*

ファイルサイズが非ゼロのファイルを検索

$ find . -type f ! -size 0
$ find . -type f ! -size 0 | tr ‘\n’ ‘ ‘

grepコマンド関連

コメント行(行頭#)と空白行を削除

$ grep -E -v ‘^#|^$’ sample.txt

複数パターンマッチを表示

$ grep -E ABC\|KLM\|XYZ sample.txt

文字列を含まないファイルを出力

$ grep -L strings *

sed関連

ファイル内の文字列を一括置換

$ sed -e s/before/after/g sample.txt

指定行のみ表示(10~20行)(-nでパターンスペース自動表示を抑制)

$ sed -n ‘10,20p’ sample.txt

指定行から最終行まで表示(15〜最終行)

$ sed -n ’15,$p’ sample.txt

ある文字列を含む行のみを表示

$ sed -n -e ‘/abc/p’ sample.txt

ある文字列を含む行を削除(-iで直接編集,-i[suffix]でバックアップ作成)

$ sed -e ‘/abc/d’ sample.txt
$ sed -i -e ‘/abc/d’ sample.txt
$ sed -i.bk -e ‘/abc/d’ sample.txt

1行目(insert)/3行目(append)に文字列を挿入

$ sed -i -e ‘1i comment’ sample.txt
$ sed -i -e ‘3a comment’ sample.txt

指定行範囲の文字列を置換(10〜20行)

$ sed -e ‘10,20s/abc/ABC/’ sample.txt

awk関連

指定フィールドを出力(セパレータがコロンの場合)

$ awk -F: ‘{print $7;}’ /etc/passwd

偶数行/奇数行のみ出力

$ awk ‘NR % 2 == 0’ sample.txt
$ awk ‘NR % 2 != 0’ sample.txt

行数(NR)とフィールド数(NF),最終列の値の出力

$ awk ‘{print NR, NF;}’ sample.txt
$ awk ‘{print $NF;}’ sample.txt

足し算

$ seq 10 | awk ‘BEGIN{sum=0}{sum=sum+$1}END{print sum}’

vi関連

空白行の削除(exモード)

:v/\S/d

mapを使ったデータの並び替え

$ cat data.txt
X1 Y1 Y2 Y3
Y4 Y5 Y6
Y7 Y8 Y9
X2 Y1 Y2 Y3
Y4 Y5 Y6
Y7 Y8 Y9

$vi data.txt

:map K 3JjK

vi起動後mapを定義(3行分の改行を削除し一行下がる,を繰り返す)し,1Gとして1行目に移動した後,Kキーを押下.すると次のようにデータが並び替えられる.

X1 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9
X2 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9

mapを使ったある範囲列の削除の例.”行頭に移動(0)、2Word進む(2W)、3Word消す(d3W)、1行下に移動(j)”を繰り返す(K).

:map K 02Wd3WjK

その他

テキストファイルの文字数カウント

$ cat sample.txt | tr ‘ ‘ ‘\n’ | sort | uniq -c | sort -nr

BoM(Byte Order Mark)の削除

$ sed -i -e ‘1s/^\xef\xbb\xbf//’ sample.txt
$ cat sample.txt | awk ‘{if(NR==1)sub(/^\xef\xbb\xbf/,””);print}’
$ vi -b sample.txt

rpmパッケージの抽出

$ rpm2cpio package.rpm | cpio -ivd

テキストファイルの行のシャッフル,ランダムな数値を出力

$ shuf sample.txt
$ shuf -e 1 2 3 4 5
$ shuf -i 1-100
$ shuf -i 1-100 -n 10

文字コードの変換(e.g. EUC-JPからUTF-8へ)

$ iconv -f EUC-JP -t UTF-8 input.txt > output.txt

カレントシェル,ログインシェルの確認

$ ps $$
$ echo $SHELL

timeコマンドで出力形式を指定

$ /usr/bin/time -f “%C cmd %e real %U user %S sys %P CPU %M Max %I In %O Out %W swp %x status” sleep 1

dateコマンドで出力形式を指定

$ date +%F
$ date +%D
$ date +%Y%m%d

サポートされるファイルシステムを表示

$ cat /proc/filesystems