京橋のバイオインフォマティシャンの日常

データ分析、コマンドライン、プログラミングについての技術資料・自己アップデート・悩み事などをまとめています。最近、ディープラーニング関連のR言語の資料をまとめるべく注力してます。

M1チップ搭載の MacBook Air におけるAutoDock Vina (1.2.2) の諸設定とドッキングシミュレーションについて

f:id:skume:20220210011802p:plain

はじめに - AutoDock Vina

AutoDockは、 30年近く開発が進められている、分子モデリングシミュレーションソフトウェアの一つです。 主に、タンパク質–リガンドのドッキングに利用されています。 2009年からオープンソース・ソフトウェアとなり、非商業的利用に関しては、無料で使用できます。 AutoDockは、過去には、HIV-1インテグラーゼ阻害剤の開発においても活用されました。

AutoDock Vinaは、 Oleg Trott 博士 (The Scripps Research Institute)らによって提供された、 AutoDock4の改良型ドッキングツール(AutoDockの後継)です。 Vinaの登場によって、計算の速度、ドッキング精度ともに大幅に改善されました。

原著論文 - AutoDock Vina -

AutoDock Vinaに関する原著論文は以下の2報となります。

  1. "J. Eberhardt, D. Santos-Martins, A. F. Tillack, and S. Forli. (2021). AutoDock Vina 1.2.0: New Docking Methods, Expanded Force Field, and Python Bindings. Journal of Chemical Information and Modeling."

  2. "O. Trott and A. J. Olson. (2010). AutoDock Vina: improving the speed and accuracy of docking with a new scoring function, efficient optimization, and multithreading. Journal of computational chemistry, 31(2), 455-461."

今回やること

M1チップ搭載の MacBook Airで、AutoDock Vina (ver 1.2.2)をセットアップしてみました。 その方法を、設定方法とともに、具体的なコマンドを説明しています。

今回、AutoDock Vinaは、ARM用のバージョンである「vina_1.2.2_macos_arm64」を使用しています。

brewの設定

まずは、Homebrewを設定します。

まだ設定されていない場合は、 過去の記事を参考に設定してください。

skume.net

brewコマンドを用いたパッケージのセットアップ

Macのターミナルを起動して、 所定のライブラリをbrewコマンドでインストールしていきます。

今回、インストールするのは、 boost、wget、gitのライブラリです。

#boostのインストール
brew install boost 

#wgetのインストール
brew install wget

#gitのインストール
brew install git

Autodock Vina 1.2.2のセットアップ

それでは、「Autodock Vina 1.2.2」のセットアップに入っていきます。 ここでは、wgetで「Autodock Vina 1.2.2」をダウンロードして、諸設定を行なっていきます。

#ダウンロード
wget https://github.com/ccsb-scripps/AutoDock-Vina/releases/download/v1.2.2/
vina_1.2.2_macos_arm64

#名前の変更
mv vina_1.2.2_macos_arm64 vina

#実行権限の付与
chmod +x vina

#vinaを任意のフォルダに移動させる
#/opt/homebrew/bin とか、すでにパスが通っているところがよい
mv vina /opt/homebrew/bin 

#パスの確認
which vina
#/opt/homebrew/bin/vina

「vina」のパス設定が完了して、「which」コマンドで確認できたらOKです。

ここまで設定できたら、ヘルプが表示されるかどうかも確認してみます。 以下の-helpオプションで、ヘルプが表示されるはずです。

#ヘルプ表示
vina -help

#AutoDock Vina v1.2.2-22-gb5f8dc1-mod
#Command line parse error: unrecognised option '-help'
#
#Correct usage:
#
#Input:
#  --receptor arg             rigid part of the receptor (PDBQT)
#  --flex arg                 flexible side chains, if any (PDBQT)
#  --ligand arg               ligand (PDBQT)
#  --batch arg                batch ligand (PDBQT)
#  --scoring arg (=vina)      scoring function (ad4, vina or vinardo)
#
#Search space (required):
#  --maps arg                 affinity maps for the autodock4.2 (ad4) or vina 
#                             scoring function
#  --center_x arg             X coordinate of the center (Angstrom)
#  --center_y arg             Y coordinate of the center (Angstrom)
#  --center_z arg             Z coordinate of the center (Angstrom)
#  --size_x arg               size in the X dimension (Angstrom)
#  --size_y arg               size in the Y dimension (Angstrom)
#  --size_z arg               size in the Z dimension (Angstrom)
#  --autobox                  set maps dimensions based on input ligand(s) (for 
#                             --score_only and --local_only)
#
#Output (optional):
#  --out arg                  output models (PDBQT), the default is chosen based
#                             on the ligand file name
#  --dir arg                  output directory for batch mode
#  --write_maps arg           output filename (directory + prefix name) for 
#                             maps. Option --force_even_voxels may be needed to 
#                             comply with .map format
#
#Misc (optional):
#  --cpu arg (=0)             the number of CPUs to use (the default is to try 
#                             to detect the number of CPUs or, failing that, use
#                             1)
#  --seed arg (=0)            explicit random seed
#  --exhaustiveness arg (=8)  exhaustiveness of the global search (roughly 
#                             proportional to time): 1+
#  --max_evals arg (=0)       number of evaluations in each MC run (if zero, 
#                             which is the default, the number of MC steps is 
#                             based on heuristics)
#  --num_modes arg (=9)       maximum number of binding modes to generate
#  --min_rmsd arg (=1)        minimum RMSD between output poses
#  --energy_range arg (=3)    maximum energy difference between the best binding
#                             mode and the worst one displayed (kcal/mol)
#  --spacing arg (=0.375)     grid spacing (Angstrom)
#  --verbosity arg (=1)       verbosity (0=no output, 1=normal, 2=verbose)
#
#Configuration file (optional):
#  --config arg               the above options can be put here
#
#Information (optional):
#  --help                     display usage summary
#  --help_advanced            display usage summary with advanced options
#  --version                  display program version

これで、初めの設定は完了です。

AutoDock Vinaのチュートリアル「basic_docking」を実行してみる

次に、GitHubにあるAutodock Vinaのリポジトリをダンロードして、 そのチュートリアルのデータで動作検証をしてみます。

以下のgit cloneコマンドで、リポジトリを取得します。

git clone https://github.com/ccsb-scripps/AutoDock-Vina.git

今回は、exampleフォルダ内のbasic_dockingをサンプルとして試してみます。

このドッキングシミュレーションのbasic_dockingのサンプルは、 典型的な使用パターンで、剛体モデルの受容体に1つの分子をドッキングすることを行います。 具体的には、非受容体型チロシンキナーゼ c-Abl の立体構造に、 抗がん剤イマチニブ(Gleevec、PDB entry: 1iep)を AutoDock Vinaを使用してドッキング実行を行います。

c-Ablは、癌原遺伝子チロシンプロテインキナーゼで、 このタンパク質は、がん化学療法、特に慢性骨髄性白血病の治療において重要な標的です。

それでは、Vinaの実行を試しますが、問題なく設定できていれば、 下記の2コマンドで、Dockingが実行されて、結果が表示されます。

#ダウンロードしたディレクト内に移動します
cd ./AutoDock-Vina/example/basic_docking/solution  

#vina実行
vina  \
    --receptor 1iep_receptor.pdbqt \
    --ligand 1iep_ligand.pdbqt \
        --config 1iep_receptor_vina_box.txt \
        --exhaustiveness=32 \
        --out 1iep_ligand_vina_out.pdbqt

--receptorには、受容体タンパク質のpdbqtファイル名を指定します。 --ligandには、リガンド(主に低分子化合物)のpdbqtファイル名を指定します。 --configには、引数として与えていない条件設定をテキストファイルとして指定します。 --exhaustivenessには、グローバル探索の網羅性を指定します(32が良いようです)。 --outには、出力ファイル名を指定します。

実行時のコンソール表示

実行結果は、以下のような感じになります。

AutoDock Vina v1.2.2-22-gb5f8dc1-mod
#################################################################
# If you used AutoDock Vina in your work, please cite:          #
#                                                               #
# J. Eberhardt, D. Santos-Martins, A. F. Tillack, and S. Forli  #
# AutoDock Vina 1.2.0: New Docking Methods, Expanded Force      #
# Field, and Python Bindings, J. Chem. Inf. Model. (2021)       #
# DOI 10.1021/acs.jcim.1c00203                                  #
#                                                               #
# O. Trott, A. J. Olson,                                        #
# AutoDock Vina: improving the speed and accuracy of docking    #
# with a new scoring function, efficient optimization and       #
# multithreading, J. Comp. Chem. (2010)                         #
# DOI 10.1002/jcc.21334                                         #
#                                                               #
# Please see https://github.com/ccsb-scripps/AutoDock-Vina for  #
# more information.                                             #
#################################################################

Scoring function : vina
Rigid receptor: 1iep_receptor.pdbqt
Ligand: 1iep_ligand.pdbqt
Grid center: X 15.19 Y 53.903 Z 16.917
Grid size  : X 20 Y 20 Z 20
Grid space : 0.375
Exhaustiveness: 32
CPU: 0
Verbosity: 1

Computing Vina grid ... done.
Performing docking (random seed: -885801442) ... 
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************

mode |   affinity | dist from best mode
     | (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
   1       -13.38          0          0
   2        -11.4      2.993      12.41
   3        -11.4      1.658      2.053
   4       -11.15      3.869      12.31
   5       -10.76      2.544      12.64
   6        -10.1      1.988      13.73
   7       -9.774      1.706      13.63
   8       -9.695      2.683      12.64
   9       -9.494      2.834       12.4       

出力ファイルの結果表示

ここでは、1iep_ligand_vina_out.pdbqtとういうファイルに、 構造データとBinding eneryなどの結果を出力されています。

#先頭20行を表示
head -n 20 1iep_ligand_vina_out.pdbqt

#MODEL 1
#REMARK VINA RESULT:   -13.057      0.000      0.000
#REMARK INTER + INTRA:         -19.158
#REMARK INTER:                 -18.700
#REMARK INTRA:                  -0.458
#REMARK UNBOUND:                -0.757
#REMARK Flexibility Score: inf
#REMARK Active torsions [ 7 ] -> [ 7 ]
#ROOT
#ATOM      1  C1  LIG L   1      15.834  54.718  12.393  1.00  0.00     0.038 A 
#ATOM      2  C2  LIG L   1      16.908  54.561  11.405  1.00  0.00    -0.029 A 
#ATOM      3  C3  LIG L   1      17.891  53.541  11.628  1.00  0.00     0.007 A 
#ATOM      4  C4  LIG L   1      17.820  52.693  12.792  1.00  0.00     0.024 A 
#ATOM      5  C5  LIG L   1      16.777  52.840  13.752  1.00  0.00     0.035 A 
#ATOM      6  C6  LIG L   1      15.778  53.874  13.532  1.00  0.00     0.047 A 
#ATOM      7  C7  LIG L   1      17.030  55.437  10.136  1.00  0.00     0.045 C 
#ENDROOT
#BRANCH    1    8
#ATOM      8  N1  LIG L   1      14.849  55.695  12.232  1.00  0.00    -0.283 N 
#ATOM      9  H1  LIG L   1      13.972  55.445  11.860  1.00  0.00     0.155 HD

まとめ

(結構、詳細は省いているが)AutoDock Vinaのセットアップから、Dockingシミュレーションまでの実行方法を紹介しました。

AutoDOck Vinaは、M1 Macでも、意外にもサクッと実行できるという良いソフトウェアでした。

参考資料

skume.net

AutoDock Vina

autodock-vina.readthedocs.io

github.com

github.com

【Rのジミ〜な小技シリーズ】変数で、データフレームに「任意の列名」を追加するTips

f:id:skume:20220131004959p:plain

はじめに

pasteなどで連結して作成した文字列をもとにして、それらをデータフレームの列名にしたい。 そういうケースがよくあるのです。

食わず嫌い的に試して無かったけど、「えっ、これできるの?!」という感じなことが起こったようです・・・。 文字列の変数で、データフレームの列名を複数追加できることがわかったので、それをメモしておきます。 R歴 約10年、まだまだ奥が深い。

test <- data.frame(a=1:3, b=4:6, c="abc")
test
#  a b   c
#1 1 4 abc
#2 2 5 abc
#3 3 6 abc

#よくやる列追加のやり方
test$d <- 7:9
test
#  a b   c d
#1 1 4 abc 7
#2 2 5 abc 8
#3 3 6 abc 9

次に、文字列の変数で、データフレームの列名を追加してみます。

#任意の文字列を作成して、列名にする
col01 <- paste0("X", "01")
#[1] "X01"
  
test[,col01] <- NA
test
#  a b   c X01
#1 1 4 abc  NA
#2 2 5 abc  NA
#3 3 6 abc  NA

#複数の任意の文字列を作成して、列名にする
col02 <- paste0("X", c("02", "03", "04"))
col02
#[1] "X02" "X03" "X04"

test[,col02] <- NA
test
#  a b   c d X01 X02 X03 X04
#1 1 4 abc 7  NA  NA  NA  NA
#2 2 5 abc 8  NA  NA  NA  NA
#3 3 6 abc 9  NA  NA  NA  NA

上記の実行コードで、"X02" "X03" "X04"という列名が一気に追加されました。 なかなか秀逸と思います。

【Rのジミ〜な小技シリーズ】エクセルデータをクリップボードにコピーして、Rのread.table関数でデータフレームとして読み込むTips

f:id:skume:20220120225925p:plain

はじめに

今までほぼやってなかったけど、さっき使ってみて思いの外、便利でよかったです。 今後はこれを使いたいと強いメッセージを込めて、これのみでメモっておきます。

まずは、Macでエクセルを起動します。 文字や数字が書かれた、エクセルの任意のセルを選択して、command + c でコピーします。

Rを起動して、以下のコマンドを打てば*1クリップボードからデータのインポートができます

ただ、以下のコード実行前に、command + c をもう一度打たないこと。 コピーしたデータがクリップボードから消えます。癖で打ってしまいそうになりますけど。。。

コピーしたセルがヘッダーを含む場合

Data <- read.table(pipe("pbpaste"), header=T, stringsAsFactors = F)
Data

# OR

Data <- read.table(pipe("pbpaste"), sep="\t", header=T, stringsAsFactors = F)
Data

コピーしたセルがヘッダーを含まない場合

Data <- read.table(pipe("pbpaste"), header=F, stringsAsFactors = F)
Data

# OR

Data <- read.table(pipe("pbpaste"), sep="\t", header=F, stringsAsFactors = F)
Data

追記(2020年6月10日)

実際に、クリップボードからR上にインポートして、 データフレームをBlog用のマークダウンなどでテーブル出力するのをやってみました。

エクセルで、以下の画像のようにセルをcommand + c でコピーしてみます。

f:id:skume:20200610162314p:plain:w350

エクセルを閉じずに、そのまま、以下のRコードを実行します。

if(!require("knitr")){install.packages("knitr")}; library(knitr)

Data <- read.table(pipe("pbpaste"), header=T, stringsAsFactors = F)

Data
#  A B  C  D
#1 1 2  3  4
#2 1 3  5  7
#3 2 5  8 11
#4 3 6  9 12
#5 4 7 10 13

#マークダウン出力
kable(Data, format = "markdown")

#|  A|  B|  C|  D|
#|--:|--:|--:|--:|
#|  1|  2|  3|  4|
#|  1|  3|  5|  7|
#|  2|  5|  8| 11|
#|  3|  6|  9| 12|
#|  4|  7| 10| 13|

#Latex出力
kable(Data, format = "latex")

#\begin{tabular}{r|r|r|r}
#\hline
#A & B & C & D\\
#\hline
#1 & 2 & 3 & 4\\
#\hline
#1 & 3 & 5 & 7\\
#\hline
#2 & 5 & 8 & 11\\
#\hline
#3 & 6 & 9 & 12\\
#\hline
#4 & 7 & 10 & 13\\
#\hline
#\end{tabular}

#Pandoc出力
kable(Data, format = "pandoc")

#  A    B    C    D
#---  ---  ---  ---
#  1    2    3    4
#  1    3    5    7
#  2    5    8   11
#  3    6    9   12
#  4    7   10   13

参考資料

http://marcoghislanzoni.com/blog/2013/10/27/import-data-r-mac-os-x-clipboard/marcoghislanzoni.com

riseki.php.xdomain.jp

*1:R4.0以降は大丈夫だが、 stringsAsFactors = F は念のためいれておくこと

grepコマンドで文字列処理をやってみた件【その2】検索語のヒット数カウントとか検索語の前後文字の抽出とか色々

f:id:skume:20220119233952p:plain

はじめに

grepコマンドによる文字列処理をやってみた」の続編です。

以前扱えていなかった内容をやっていきたいです。

grepコマンドの基本については過去の記事を参照のこと。

skume.hatenablog.com

まずは、サンプルデータをダウンロードする

$ svn export  https://github.com/kumeS/Blog/trunk/grep_practice_02

$ cd ./grep_practice_02

# test.txtを使っていく。
$ cat test.txt

#abcde
#ABCDE
#
#abcdefghijklmnopqrstuvwxyz
#ABCDEFGHIJKLMNOPQRSTUVWXYZ
#
#12345abcde67890fghij
#12345abcde67890fghij

内容

検索語に一致した文字列のみを抜き出して出力する

grep -oを使うと、検索後と同じものが、ヒットした文字列として出力されます。

#'abc'で検索すると、5個ヒット
$ grep -o 'abc' test.txt
#abc
#abc
#abc
#abc
#abc

# -o を入れずに検索すると、'abc'を含む行数の4個でヒット
$ grep 'abc' test.txt
#abcdeabcde
#abcdefghijklmnopqrstuvwxyz
#12345abcde67890fghij
#12345abcde67890fghij

#'fghij'で検索すると、3個ヒット
$ grep -o 'fghij' test.txt
#fghij
#fghij
#fghij

大文字・小文字を区別せず、検索語に一致した文字列のみを抜き出して出力する

grep -o -iを使うと、大文字・小文字が区別されずに、ヒットした文字列が出力されます。

#'abc' or 'ABC'で検索され、8個ヒット
$ grep -o -i 'abc' test.txt
#abc
#abc
#ABC
#ABC
#abc
#ABC
#abc
#abc

# -i のみで検索すると、6個ヒット
$ grep -i 'abc' test.txt
#abcdeabcde
#ABCDEABCDE
#abcdefghijklmnopqrstuvwxyz
#ABCDEFGHIJKLMNOPQRSTUVWXYZ
#12345abcde67890fghij
#12345abcde67890fghij

#'fghij' or 'FGHIJ' で検索され、4個ヒット
$ grep -o -i 'fghij' test.txt
#fghij
#FGHIJ
#fghij
#fghij

検索語に一致した文字列の数をカウントする【部分一致検索】

grep -ogrep -cを使うと、検索語に一致した文字列数が出力されます。

このとき注意することとしてコマンドを分けずに、grep -o -cにすると、行数カウントになります。

#'abc'で検索して、'abc'をカウントすると、5個ヒット
$ grep -o 'abc' test.txt | grep -c 'abc'
#5

# -o -c にすると、4個ヒットで、行数カウントになる
$ grep -o -c 'abc' test.txt
#4

#'fghij'で検索すると、3個ヒット
$ grep -o 'fghij' test.txt | grep -c 'fghij'
#3

検索語に一致した箇所の前後の行を出力する

grep -Cを使うと、前後の行(行数指定)を一緒に出力できます。

#前後1行を出力する
$ grep -C 1 'hijklmn' test.txt
#
#abcdefghijklmnopqrstuvwxyz
#ABCDEFGHIJKLMNOPQRSTUVWXYZ

#前1行、後3行を出力する
$ grep  -B 1  -A 3 'hijklmn' test.txt
#123456
#abcdefghijklmnopqrstuvwxyz
#ABCDEFGHIJKLMNOPQRSTUVWXYZ
#
#12345abcde67890fghij

grep -B -Aを使うと、-Bで検索語前の行数、-Aで検索語後の行数を指定できます。

検索語に一致した箇所の前後の文字列を出力する

上記で、行レベルで出力する方法を紹介したが、 正規表現. (ピリオド)を使うと、前後の文字列も出力できます。

#検索語を抜き出して表示
$ grep -o 'efghijk' test.txt
#efghijk

#検索語の前4文字も含めて出力
$ grep -o '....efghijk' test.txt
#abcdefghijk

#検索語の後4文字も含めて出力
$ grep -o 'efghijk....' test.txt
#efghijklmno

#検索語の前4文字、後4文字も含めて出力
$ grep -o '....efghijk....' test.txt
#abcdefghijklmno

また、検索語を「変数」で指定することもできる。

TERMS=$"efghijk" ; grep -o "....$TERMS...." test.txt
#OR
TERMS=$'efghijk' ; grep -o "....$TERMS...." test.txt

#abcdefghijklmno

やってみると、'"の組み合わせが重要らしいです。

;は、複数文を繋げて書く文法である。

検索語を行番号付きで出力する

grep -nを使うと、行番号付きで出力されます。

#'abc'行を行番号付きで出力
$ grep -o -n 'abc' test.txt
#1:abc
#abc
#4:abc
#7:abc
#8:abc

$ grep -n 'abc' test.txt
#1:abcdeabcde
#4:abcdefghijklmnopqrstuvwxyz
#7:12345abcde67890fghij
#8:12345abcde67890fghij

#'fghij'行を行番号付きで出力
$ grep -o -n 'fghij' test.txt
#4:fghij
#7:fghij
#8:fghij

検索語の行番号のみを出力する

行番号のみを出力するには、sedとの組み合わせで行います。

#'abc'行を行番号のみ出力
$ grep -n 'abc' test.txt | sed -e 's/:.*//g'
#1
#4
#7
#8

#'fghij'行を行番号のみ出力
$ grep -n 'fghij' test.txt | sed -e 's/:.*//g'
#4
#7
#8

grepのエラーメッセージを消す

そのままではあまり使わないけど、プログラムを組むときには役に立つかもです。

#フォルダに実行するとエラーが出る
$ grep 'abcd' test
grep: test: Is a directory

$ grep -s 'abcd' test
#OR
$ grep --no-messages 'abcd' test
#エラーメッセージの非表示

まとめ

grepコマンドは結構役に立つので、一通り覚えておくと、 いろいろなテキストの前処理とかに使えそうです。

補足

正規表現のまとめ

正規表現 (Regular Expression)は、文字列のパターン・マッチングなどの表記法として使用する。

また、メタキャラクタとは、文字列のパターンを表す特殊な記号のことを指す。

メタキャラクタ そのメタキャラクタが意味すること
. 任意の一文字
* 前にある文字の0回以上の繰り返し
+ 前にある文字の1回以上の繰り返し
? 前にある文字の0回あるいは1回の意味
^ 指定した文字が文頭
$ 指定した文字が文末
[ ] 指定した複数の文字の中のいずれか
{ } 前にある文字の指定した回数の繰り返し
\w 英数文字またはアンダーバー。[a-zA-Z0-9_]と同等
\W \w 以外の文字
\d 数値文字。[0-9]と同等
\D 数値以外の文字。[^0-9]と同等
\s 空白文字
\S 空白以外の文字
\b ワードの先頭、あるいは末尾にマッチ
\B ワード内の文字列にマッチ
\A 文字列の最初にマッチ
\Z 文字列の最後にマッチ
\t タブ
\n 改行
\r キャリッジリターン

参考

www.wakuwakubank.com

webplus8.com

www.gadgety.net

grepコマンドで文字列処理をやってみた件【その1】ファイル内のテキストに対する処理とか

f:id:skume:20220119224919p:plain

はじめに

grepコマンドは、ある特定の文字列を含むものを取り出す・検索するときに使用します。 大別して、ファイル内のテキストに対してgrepを行うか、ファイル名に対してgrepを行うかでやり方が変わってきます。

やってることは単純だが、いろいろと応用できるので、今回まとめてみました。

練習用のファイルのダウンロード

練習用のファイル・フォルダを以下のコマンドでダウンロードできるようにしています。

#ダウンロード
$ svn export  https://github.com/kumeS/Blog/trunk/grep_practice

#作業フォルダに移動
$ cd ./grep_practice

内容

ファイル内のテキストに対する処理

ある特定の文字列を含む行を表示する

#ファイル内の表示
$ cat test_01.txt

#'abc'を含む行を出力する
$ grep 'abc' test_01.txt
#OR
$ grep "abc" test_01.txt
#OR
$ cat test_01.txt | grep 'abc'

ある特定の文字列を含まない行を表示する

#'abc'を含まない行を出力する
$ grep -v 'abc' test_01.txt 
#OR
$ cat test_01.txt | grep -v "abc"

ある特定の文字列を含まない行を別ファイルに出力する

#'abc'を含まない行を「test_01_v.txt」として保存する
$ grep -v 'abc' test_01.txt > test_01_v.txt

#test_01_v.txtの表示
$ cat test_01_v.txt

オプション

-v: 文字列を含まない、あるいは、一致しないものを検索する

空白行を削除する

#空白行を含まない行の表示
$ cat test_02.txt | grep -v '^\s*$'

#別ファイルで保存する場合
$ cat test_02.txt | grep -v '^\s*$' > test_02_r.txt

オプション

^: 行頭

\s: 空白文字

^\s*: 行頭から0回以上繰り返しの空白

ファイル内の行数をカウントする

#ファイル内全体の行数のカウント
$ cat test_01.txt | grep '' -c

#grepを使わない方法
$ cat test_01.txt | wc -l

#'abc'を含む行数のみのカウント
$ cat test_01.txt | grep 'abc' -c

オプション

-c: 行数とかのカウント

複数条件で、文字列の検索をする場合

grepでのAND検索

$ cat test_02.txt

#AND検索
#'AAA'と'ABB'を同行に含む行の表示
$ grep 'AAA' test_02.txt | grep 'ABB'

grepでのOR検索

$ cat test_02.txt

#OR検索(-e表記)
#'AAA'あるいは'BBB'を含む行の表示
$ grep -e 'AAA' -e 'BBB' test_02.txt

#OR検索(正規表現、\| を使う)
#'AAA'あるいは'BBB'を含む行の表示
$ grep 'AAA\|BBB' test_02.txt

オプション

-e: 検索パターンを指定する

-w: 単語全体でパターンと一致するものを検索する

-x: 行全体がパターンと一致するものを検索する

-i: 大文字と小文字を区別しない

-n: 検索結果に行番号を表示する

ファイル名に対する処理

ある特定の文字列をファイル名に含むファイルを検索する

#ディレクトリ内ファイルの表示
$ ls

#.txtファイルのみを表示する
$ ls | grep '.txt'
#.txtファイルのカウント
$ ls | grep '.txt' | wc -l

#ファイル内の行、ワード、バイトの各カウントの表示
$ ls | grep 'test_01.txt' | wc
#OR
$ wc test_01.txt

オプション

-l: ファイル名を検索対象とする

サブディレクトリも含めて検索する

#'.pdf'を含むファイル数のカウント
$ ls | grep '.pdf' | wc -l

#サブディレクトリを含めたファイル表示
$ du -a

#サブディレクトリを含めて、'.pdf'を含むファイルの表示
$ du -a | grep '.pdf'

#サブディレクトリを含めて、ファイル数のカウント
$ du -a | grep '.pdf' | wc -l

特定のファイルを検索して、消去する

#ディレクトリ内の'.pdf'を含むファイルを消去する
$ ls | grep '.pdf' | xargs rm -rf

#サブディレクトリも含めて削除する場合
$ du -a | grep '.pdf' | xargs rm -rf

ここで、 xargs は、前のコマンドの実行結果を引数にして、次のコマンド rm に渡すことを意味します。

補足

ターミナル・ショートカット
カーソルの移動
Ctrl + b 後退・一語後退
Ctrl + f 前進・一語前進
Ctrl + a 行頭へ移動
Ctrl + e 行末へ移動
削除
Ctrl + w 単語1個文削除
Ctrl + k 行末まで削除
Ctrl + u 行頭まで削除
Ctrl + d カーソル上の1文字削除
Ctrl + h カーソルの後方を1文字削除
履歴
一つ前のコマンド履歴
次のコマンド履歴
history (コマンド) 履歴
その他
Ctrl + c 実行中のコマンドを強制終了
Ctrl + z 実行中のコマンドを一時停止
Ctrl + d 終了、Logout
Ctrl + l 画面をクリアする
Ctrl + t 一つ前とカーソルの文字の入替
Ctrl + m, Ctrl + j, Ctrl + o Enter

cd : ディレクトリ移動

f:id:skume:20200607071106p:plain:w400

cat : ファイル内表示・結合・作成
#テキストファイル(test.txt)内の表示
$ cat test.txt

#行番号を付加して、ファイル表示
$ cat -n test.txt

#複数ファイルから、結合ファイルを作成(行方向に結合)
$ cat test1.txt test2.txt > test3.txt

#空ファイルの作成(Ctrl + d で終了すること)
$ cat > test4.txt

#すべての履歴表示、「~ (チルダ)」はHomeディレクトリ
$ cat ~/.bash_history
#OR
$ history

head / tail : ファイルの先頭や末尾を表示
#ファイルの先頭から、10行を表示
$ head -n 10 test.txt

#ファイルの末尾から、10行を表示
$ tail -n 10 test.txt

覚えておくと良いターミナルコマンド
#システムを終了する
$ shutdown -f now
              
#再起動する
$ reboot

#すべてのユーザーに実行権限を与える
$ chmod a+x test.command

#Rootユーザーでコマンドを実行する
$ sudo ...

その他のターミナルコマンド
#日時を表示するコマンド。
$ date

#2012年のカレンダーを表示する
$ cal 2020

#アクティブなジョブの表示
$ jobs

関連記事

skume.net