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