Bash 使用AWK或SED如何删除第一列';s字符计数不为';t等于13

Bash 使用AWK或SED如何删除第一列';s字符计数不为';t等于13,bash,awk,sed,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,p

使用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

使用
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
使用
awk
(需要gawk 4+或3+以及--re interval选项)

使用
sed

sed '/^[0-9]\{13\},/p;1p;d' file
如果Perl是一个选项:

如果$F[0]=~/^[0-9]{13}$/或$.==1'文件

使用以下命令行选项:

  • -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

sed
命令未执行OP要求的操作。看起来
awk
命令也不是。@mad物理学家,它是给我的…,它做错了什么?它检查的是整行,而不是第一列。
awk -F, 'NR==1 || (length($1) == 13 && $1+0 == $1)' file 
timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request