awk,打印以四位数字开头的行

awk,打印以四位数字开头的行,awk,Awk,我想打印文件中以四位数字开头的所有行。我尝试过这个方法,但不起作用: cat data.txt | awk --posix '{ if ($1 ~ /^[0-9]{4}/) print $1}' 没有生成任何输出 下一行打印以数字开头的所有LIN: cat data.txt | awk --posix '{ if ($1 ~ /^[0-9]/) print $1}' 对于与给定regexpgrep匹配的打印行,grep是第一个抓取的工具: grep -Eo '^[0-9]{4}[^0-9]*

我想打印文件中以四位数字开头的所有行。我尝试过这个方法,但不起作用:

cat data.txt | awk --posix '{ if ($1 ~ /^[0-9]{4}/) print $1}'
没有生成任何输出

下一行打印以数字开头的所有LIN:

cat data.txt | awk --posix '{ if ($1 ~ /^[0-9]/) print $1}'

对于与给定regexp
grep
匹配的打印行,grep是第一个抓取的工具:

grep -Eo '^[0-9]{4}[^0-9]*\s' file
使用awk:

$ awk '/^[0-9][0-9][0-9][0-9]/ {print $1}' your_file
也就是说,检查该行起始的4位数字

更新:第5个字符不是数字

$ awk '/^[0-9][0-9][0-9][0-9]([^0-9].*)?$/ {print $1}' your_file

注意:不必使用
{if($1~/^[0-9]/)
语句,只需使用
/^…/

我看不出问题所在

awk --posix '{ if ($1 ~ /^[0-9]{4}/) print $1}'<<EOT
1234 qwer
234 asdf
34456 qwe
EOT
果然

如果需要精确匹配四位数字,则可以使用:

awk --posix '$1~/^[0-9]{4}$/{print $1}'<<EOT
1234 qwer
234 asdf
34456 qwe
EOT
但实际上,如果您在
bash
中,则不需要运行
awk

while read f rest; do
  [[ $f =~ ^[[:digit:]]{4}$ ]] && echo $f
done <<EOT
1234 qwer
234 asdf
34456 qwe
EOT

另一个例子是.Print all line that match或Print all line that match的第一个字段?Awk基本上是一种模式/动作语言;是一种基本技能。是一种模式。您可能应该在这里使用grep,但无论如何都要学习Awk的模式/动作。@MikeSherrill'Catcall':实际上您不需要
Awk
在代码< BASH < /代码>中也可以很容易地解决这个问题。谢谢,这有点帮助。我忘了提到我需要以精确的四个数字开头。你的解决方案在开始时也显示出4个数字。你可能仍然想考虑一个包含恰好四个数字的行的拐角情况;<代码> /^ [09] [09] [0-9]。[0-9]([^0-9].*)$/…
1234
while read f rest; do
  [[ $f =~ ^[[:digit:]]{4}$ ]] && echo $f
done <<EOT
1234 qwer
234 asdf
34456 qwe
EOT
1234