LoginSignup
0
1

More than 5 years have passed since last update.

シェルを使ったデータ前処理のメモ

Last updated at Posted at 2019-03-02

cut

デリミタ(区切り文字)を指定して、csvから特定の列のみを抜き出すことができる。
cut -d デリミタ -f 列番号
e.x.

# csvの2列目を抜き出す
cat timestamp.csv| cut -d, -f2 > timestamp_edited.csv

sed

-i: ファイルを上書き編集
1d: 1行目を削除
1-5d: 1行目から5行目を削除

# テキストファイルの先頭を削除
sed -i '1d' timestamp.csv

awk

awk -F デリミタ -v awk内変数名=値 'grep条件 BEGIN{初回処理} {行ごとの処理} END{終了時の処理}'
(BEGIN,ENDは省略可能)
$0: 現在の行の文字列
$2: 2つ目のフィールドの文字列
NR: 現在の行番号
NF: フィールド個数
- $NF: 最終フィールドの値

## 3つのフォルダで、内部のファイル数を合わせる
# ファイルが一番少ないディレクリでのファイル個数を取得
min_num=$(for i in 1 2 3; do ls dir$i | wc -l ; done | awk 'BEGIN{i=9999999} {if(i>$0)i=$0} END{print i}')
# 多いファイルを削除
cd dir1
ls | awk -F '[e.]' -v min_num=$min_num '$2>=min_num {print $0}' | xargs rm
cd ../dir2
.
.
# ファイルの行数を変更
cat timestamp.csv | awk -v min_num=$min_num 'NR<=min_num {print $0}'> timestamp.txt

Ruby

Rubyでも-nlaF"[ ]+"をオプションにつければ、ほとんどawkと同じような使い方ができるらしい。
参考: https://seesaawiki.jp/w/kou1okada/d/Ruby%20-%20AWK%20%A4%AB%A4%E9%A4%CE%B0%DC%BF%A2

0
1
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
1