使用AWK或SED如何删除第一列的字符数不等于13的任何行

时间:2015-12-29 09:41:05

标签: 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

4 个答案:

答案 0 :(得分:2)

使用sed,如果行号为1或第一个字段由十三个数字组成,则传递;否则,删除。

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

使用Awk,类似地,如果行号为1则打印,或者第一个字段是十三个字符和所有数字。

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

答案 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 :(得分:0)

awk -F, 'NR==1 || (length($1) == 13 && $1+0 == $1)' file 

答案 3 :(得分:0)

如果Perl是一个选项:

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

使用以下命令行选项:

  • -n循环输入文件的每一行
  • -a autosplit模式 - 将输入行拆分为@F数组。默认为在空格上拆分。
  • -e执行perl代码
  • -F autosplit修饰符,在这种情况下会在,
  • 上拆分

$.是行号
@F是每行中的单词数组,以$F[0]

开头编制索引

输出:

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