awk命令删除行,如果它有数字作为tsv文件中第一列的第一个字符

时间:2017-06-06 12:29:49

标签: csv awk

我试图删除行,如果它有数字作为tsv文件第一列中的第一个字符。

abc london
def paris
4ge berlin
323 rome
xyz prague
#56 Bern

我想删除(行:4ge,323,#56)。我尝试过的是这样的事情

awk 'BEGIN{FS=OFS="\t"}{$1=/^[0-9]/; print $1,$2}' train.tsv > train.tsv

3 个答案:

答案 0 :(得分:3)

像这样:

awk '!/^[[:digit:]]/' file

由于它是第一列,您可以简单地检查整行是否以数字开始(而不是)。如果您对可以使用的任何其他列感兴趣(例如第二列):

awk '$2 !~ /^[[:digit:]]/' file

顺便说一下,你可能会错过这里的打印命令。那是因为它是默认命令,意思是

awk '!/^[[:digit:]]/' file

相同
awk '!/^[[:digit:]]/{print}' file

相同
awk '!/^[[:digit:]]/{print $0}' file

答案 1 :(得分:2)

这就是grep被发明的那种工作:

grep -v '^[0-9]'

grep '^[^0-9]'之间的区别在于前者会打印空行,后者则不会。

答案 2 :(得分:0)

在这里尝试使用grep。

grep -o '^[^0-9].*'   Input_file

使用grep的-o选项检查有关正则表达式的行的开头。简单地说,这是一行不与数字dtart然后打印它。 ^告诉grep从哪里开始,[^ 0-9]告诉neget数字。*将在这里完成剩下的行。