BETA

テキスト処理の神!sedコマンドとawkコマンド

投稿日:2019-11-17
最終更新:2019-11-18

sedコマンドとawkコマンドを学習したので、まとめてみる。
特にawkコマンドはプログラミングみたいで、使いこなせればいろいろできそう。

sedコマンド

文字列置換の時に大活躍のコマンド。
通常だと置換前データは変更しない。

行を削除する

# 1行目削除。  
$ sed 1d test.txt  

# 2行目から5行目まで削除。  
$ sed 2,5d test.txt  

# 3行目から最終行まで削除。  
$ sed '3,$d’ test.txt  

# 正規表現を使ってBで始まる行を削除。  
$ sed /^B/d test.txt  

行を置換する

# 行頭から探して最初の文字列abcをxyzに置換する。  
$ sed 's/abc/xyz/' test.txt  

# 行の全ての文字列abcをxyzに置換する。  
$ sed 's/abc/xyz/g' test.txt  

# 置換が発生した行だけ出力。  
$ sed -n 's/!//gp' test.txt  

# 区切り文字も変えられる。  
# 1行目から3行目の範囲を指定。  
$ sed '1,3s!abc!/abc/!/g' test.txt  

# 上書き前のファイルに拡張子.bakをつけて保管することもできる  
$ sed -i.bak -e '/^#/d' config.txt  

他に使えるオプション。

オプション 意味
-e スクリプトを指定。
-i 上書きする。
-r 拡張正規表現を使う。

awkコマンド

軽いプログラミング的なことができるコマンド。
基本は$ awk 'パターン {アクション]'

列をフィールド、行をレコードと呼ぶ。
パターンを指定しない場合、全てのレコードに対してアクションが行われる。

各フィールドの値はそれぞれ変数に格納される。
第1フィールドは$1、第2フィールドは$2みたいに。
$0はレコード全体を示す。
変数NFはフィールド数を、変数NRはレコード数を表す。
$NFで最後のフィールドの値を参照できる。

使えるオプション。

オプション 意味
-F 区切り文字を指定(デフォルトはスペース)。
-i スクリプトファイルを読み込む。

使い方↓

# 第5フィールドと第9フィールドを出力。  
$ ls -l /usr/bin | awk '{print $5,$9}'  

# 最後と最後から2番目のフィールドを出力。  
$ $ ls -l /usr/bin | awk '{print $(NF-1),$NF}'  

# 第9フィールドのcpで始まる行をパターンで指定。  
$ ls -l /usr/bin | awk '$9 ~ /^cp/ {print $5,$9}'  
187392 cp  
185320 cpio  
67152 cpupower  

# 比較対象を省略すると行の先頭から検索する。  
$ ls -l /usr/bin | awk '/^l/ {print $5,$9}'  

# アクションまたはprintの引数を省略すると{print $0}が実行される。  
# 以下三つは全て同じ。  
$ awk '$9 ~ /^cp/'  
$ awk '$9 ~ /^cp/ {print}'  
$ awk '$9 ~ /^cp/ {print $0}'  

# 「,」を区切り文字に、「average.awk」をスクリプトファイルに指定して平均値を求める。  
$ cat score.svc  
1,osumi,39  
2,miyake,74  
3,suzuki,59  
4,hasegawa,12  
5,ino,98  
6,tanaka,41  

$ cat average.awk  
{sum += $NF} END{print “Average:”,sum/NR}  

$ awk -F, -f average.awk score.svc  
Average: 53.8333  

感想

sedコマンドはこないだの自動画像収集ツールの時にも使ったし、だいぶ詳しくなった↓
Google Custom Search APIを使って自動画像収集ツールを作ったった
文字列置換はやっぱ便利だね。

参考にしたサイト等

sedでこういう時はどう書く?

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

BЯunoの技術ブログ。日々学んだことを記録していくよ。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!