0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SadServers学習メモ #3】使ったコマンドまとめ(awk, grep, view)

Posted at

初めに

Linuxの学習目的でSadServersを始めました。
備忘のために使用したコマンドをアウトプットします。

SadServersとは

Linuxの学習サイト。
架空のサーバを題材とし、その管理者となって与えられた依頼をこなしていく。
実際にコマンドを使って作業をすることで、実践的なスキルが身につくことが期待できる。

今回のお題

タイトル

"The Command Line Murders"

詳細

  • 以下で公開されている課題を解く
    • ある町の事件に関する資料
    • 資料を見て犯人を特定する

作業の流れ

各種コマンドを使用し、犯人を特定する
※ネタバレになるので詳しい手順は割愛します。

使ったコマンド

awkコマンド

ファイルから文字列を抽出するコマンド。

$ awk 'パターン { アクション }'
  • パターンには抽出する行の条件を記載する。
  • アクションには抽出した行に対してどんな処理を行うかを記載する。

※前回の記事でも解説したので良ければご覧ください。

例)

以下のファイルから女性の名前を抽出したい

抽出元ファイル
NAME	GENDER	AGE	ADDRESS
Alicia Fuentes	F	48	Walton Street, line 433
Jo-Ting Losev	F	46	Hemenway Street, line 390
Elena Edmonds	F	58	Elmwood Avenue, line 123
Naydene Cabral	F	46	Winthrop Street, line 454
Dato Rosengren	M	22	Mystic Street, line 477
Fernanda Serrano	F	37	Redlands Road, line 392
Emiliano Wenk	M	90	Paulding Street, line 490
Larry Lapin	M	71	Atwill Road, line 298
抽出結果
$ awk '$3 ~ F {print $1, $2}' file
Alicia Fuentes
Jo-Ting Losev
Elena Edmonds
  • パターンには抽出する行の条件を記載
    • ~は等しいという意味
  • printではカンマ区切りをすることで間にスペースを入れることができる

grepコマンド

ファイルから特定の文字が含まれる行を抽出するコマンド

$ grep 検索文字列 検索対象ファイル

※以前こちらの記事で解説したので良ければご覧ください

例1)二つのファイルに共通する行を抽出したい

ファイル1
Jo-Ting Losev
Dato Rosengren
ファイル2
NAME	GENDER	AGE	ADDRESS
Alicia Fuentes	F	48	Walton Street, line 433
Jo-Ting Losev	F	46	Hemenway Street, line 390
Elena Edmonds	F	58	Elmwood Avenue, line 123
Naydene Cabral	F	46	Winthrop Street, line 454
Dato Rosengren	M	22	Mystic Street, line 477
Fernanda Serrano	F	37	Redlands Road, line 392
Emiliano Wenk	M	90	Paulding Street, line 490
Larry Lapin	M	71	Atwill Road, line 298
実行結果
$ grep -Ff file1 file2
Jo-Ting Losev	F	46	Hemenway Street, line 390
Dato Rosengren	M	22	Mystic Street, line 477
  • 検索文字列にファイルを指定する場合は-fを用いる
  • -Fを用いることで、固定文字列で検索することができる(正規表現を使用しない)
    • 今回は空白を含むため-Fを用いた
  • 検索結果の文字列は第二引数のファイルになる

例2)標準入出力(|)で送られてきた文字列で検索する

$ grep -Ff file1 file2 | grep -F - file3
  • 標準入出力の値を指定する時は-を使用する

例3)検索結果の周辺の行を表示する

検索元ファイル
License Plate T3YUHF6
Make: Toyota
Color: Yellow
Owner: Jianbo Megannem
Height: 5'6"
Weight: 246 lbs

License Plate EZ21ECE
Make: BMW
Color: Gold
Owner: Norbert Feldwehr
Height: 5'3"
Weight: 205 lbs
$ grep 'Toyota' -A 4 -B 1
License Plate T3YUHF6
Make: Toyota
Color: Yellow
Owner: Jianbo Megannem
Height: 5'6"
Weight: 246 lbs
  • -A-B-Cで抽出結果の前後も表示することができる
    • -A:検索結果の後n行
    • -B:検索結果の前n行
    • -C:検索結果の前後n行

viewコマンド

ファイルを読み込み専用で開く
viの読み込み専用版

$ view ファイル名
  • :set numberで行数を表示する
  • /文字列で文字列を検索する
    • 検索後はnで検索箇所を移動できる

回答

※ネタばれになってしまうので割愛します。

終わりに

今までの問題とは違いましたが、謎解きしながらコマンドが学べるのは面白かったです。
全部英語なので苦労しましたが、なんとか雰囲気でクリアすることができました。

ここまでご覧いただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?