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