csvの空行・コメント行・コメント部分を除外したフィールド数をカウントする

awkを使った、テキストファイルを処理するスクリプトです。

csvファイル(sample.csv)から1行ずつ読み込み、そのフィールド数を標準出力する。

  1. 行頭の直後が行末である行は空行とする。
  2. (半角スペースまたはタブ文字)のみで構成された行は空行とする。
  3. 行頭が「#」の行はコメント行とする。
  4. 行頭から、最初に出現する「#」直前までの部分文字列が、半角スペースまたはタブ文字のみで構成される場合、その行をコメント行とする。
  5. (空行またはコメント行)以外の行を有効行とする。
  6. 有効行に「#」が含まれる場合、行頭から最初に出現する「#」の直前までを当該行の有効文字列とする。
  7. 有効行に「#」が含まれない場合、当該行全体を有効文字列とする。
  8. 有効行について、有効文字列をカンマ区切りした場合のフィールド数を標準出力する。
#!/bin/bash

for COLNUM in `awk -F"," '/^([ \t]*$|[ \t]*#|$)/ {next} {sub("#.*", "")}{print NF}' ./sample.csv`
do
    echo $COLNUM
done