機略戦記

Maneuver warfare

awk

awkである列の値を重複する件数を付けて表示したい

awk

結論 cat train_plus_test.csv | awk -F, '{table[$10]=table[$10]+1} END{for (i in table) { print i, table[i] } }' | sort 説明 uniq -cみたいな事したい。 連想配列に集計したい値をkey、出現回数をvalueにして格納していく。

awkで指定した行のみを出力する。たとえば1行目以外を出力する

awk

結論 cat test.csv | awk -F',' 'FNR > 1 {print $0}' 1行目以外を出力する 説明 NFRに処理行数が入っているので、それをパターンに使ってフィルターする。 例えば、csvファイルのヘッダーだけ無視したい時とかに使える

awkでcsvに強引に一列追加する

awk

結論 cat test.csv | awk -F',' 'BEGIN{OFS=","} {$1=$1"," ; print $0}' 解説 一列目と二列目の間に列を追加したい。 一列目を「一列目に,を加えたもの」で上書きして出力している。 OFSに,を指定して出力をcsvにする

awkで、n番目のフィールドが条件に一致した時だけ処理したい

awk

結論 これ $ echo '1 1\n2 1\n3 1' | awk '$1 > 1' 2 1 3 1 説明 awkで、n番目のフィールドがパターンにマッチした時だけ処理したい - 時系列のフリーランチshinya131-note.hatenablog.jp これ、パターンマッチじゃなくて、不等号とか==でtrueの時だけ処理し…

あるファイルに重複する行が無いかチェックしたい

結論 cat あるファイル | sort | uniq -c | awk '$1 > 1' 解説 sortしてuniq -cすることで、1列目に出現回数、2列目に内容が出力される。 awkで1列目が2以上になっている行(=重複した行)を取り出してる。

awkで、n番目のフィールドがパターンにマッチした時だけ処理したい

awk

結論 1番目のフィールドにキーワードが含まれる場合だけ処理する場合 awk '$1 ~ /キーワード/' 説明 1フィールド目に1を含む行だけ処理したい。 この例だと1行目だけを処理したい。 $ echo '1 a1\n2 b1\n3 c1' 1 a1 2 b1 3 c1 こうすると、2フィールド目に含…

指定したディレクトリにある全てのテキストファイルの内容をファイル名と共に出力したい

awk

結論 awkでできる $ awk '{print FILENAME $0}' ./target_directory/* filename_a 1 filename_a 2 filename_a 3 filename_b 1 filename_b 2 filename_b 3 filename_c 1 filename_c 2 filename_c 3 説明 FILENAMEで現在読み込んでいるファイル名 $0で読み込ん…

AWKで現在読み込んでいる行の次の行を表示したい

awk

結論 cat ~/.ssh/config | awk '/xxx-xxx-01/ { print ; getline; print }' とりあえず出来た 注意点: getlineは色々注意点があるようだ(把握してない) http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_074 説明 こういうファイルで、Hostに対応…

awkで「右側からn番目のフィールド」を取り扱いたい

awk

結論 こう $(NF-n) 説明 awk '{print $1}' # 左から1番目のフィールドをprint awk '{print $NF}' # 一番右のフィールドをprint awk '{print $(NF-1)}' # 右からn番目のフィールドをprint NFにフィールド数が入っているので、それを使う

変な文字を含むファイル名が無いかチェックしたい

結論 find .で全ファイル名を取得して正規表現で探す $ find . -type f | awk -F / '{print $NF}' | awk '!/^[a-zA-Z0-9._-]+$/' has_space_file_name 2.png has_ampersand_file&name.jpg 日本語のファイル名.txt 説明 find . -type f | # 全ファイル名を取…

awkの"パターン"でできることのメモ

awk

入力例 $ input.txt a2 a3 b1 b2 b3 c1 c2 c3 基本的なやつ 正規表現に一致した行だけを処理する $ awk '/a/' input.txt a1 a2 a3 複数のパターンの組合せ or $ awk '/a/ || /b/' input.txt a1 a2 a3 b1 b2 b3 and $ awk '/a/ && /1/' input.txt a1 その他 n…