/ / AWKまたはSEDを使用して、最初の列の文字数が13に等しくない行を削除するにはどうすればよいですか-bash、awk、sed

AWKまたはSEDを使用して、最初の列の文字カウントが13に等しくない行を削除するにはどうすればよいですか-bash、awk、sed

AWKまたはsedを使用して、タイムスタンプ(最初の列)が13の数字と等しくない行を、最初の行を無視して削除するにはどうすればよいですか。

前:

timestamp,pageNo,description
1451317591621,01,Home Page Request
14513,Home Page Request
1451317591623,03,Home Page Request
1451317,04,Home Page Request
1451317591625,05,Home Page Request

後:

timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request

回答:

回答№1は1

使用 awk (--re-intervalオプションを指定したgawk 4+または3+が必要です)

awk -F, "$1~/^[0-9]{13}$/||NR==1" file

使用 sed

sed "/^[0-9]{13},/p;1p;d" file

回答№2については2

使用 sed、行番号が1であるか、最初のフィールドが正確に13桁で構成されている場合に渡します。それ以外の場合は、削除します。

sed -r -e "1b" -e "/^[0-9]{13},/b" -e d file

同様に、Awkを使用して、行番号が1であるか、最初のフィールドが13文字ですべての番号である場合に印刷します。

awk -F , "NR == 1 || (len($1) == 13 && $1 ~ /^[0-9]*$/)" file

回答№3の場合は0
awk -F, "NR==1 || (length($1) == 13 && $1+0 == $1)" file

回答№4の場合は0

Perlがオプションの場合

perl -F, -ane "print if $F[0] =~ /^[0-9]{13}$/ or $. == 1" file

次のコマンドラインオプションが使用されます。

  • -n 入力ファイルの各行をループします
  • -a 自動分割モード–入力行をに分割します @F アレイ。デフォルトでは空白で分割されます。
  • -e Perlコードを実行します
  • -F 自動分割修飾子。この場合は分割されます。 ,

$. 行番号です
@F は、各行の単語の配列であり、 $F[0]

出力:

timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request