表达式中的语法错误(错误标记为“i=2”)

发布于 2024-11-01 15:29:40 字数 249 浏览 1 评论 0原文

for (( int i="$4"; i<"$5"; i++ ))
do
     awk "NR==i{print}" $1
done

我希望 awk 打印出 $4 到 $5 之间的记录(这将是一个范围,即 4-9 )

无法弄清楚为什么我会收到此错误?

Syntax error in expression ( error token is "i=2" )
for (( int i="$4"; i<"$5"; i++ ))
do
     awk "NR==i{print}" $1
done

I want awk to print out the records between $4 and $5 ( itll be a range, ie 4-9 )

cant figure out why im getting this error?

Syntax error in expression ( error token is "i=2" )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

此岸叶落 2024-11-08 15:29:40

这不是 C。您不需要声明计数器的类型。

This is not C. You don't need to declare the type of the counter.

挽你眉间 2024-11-08 15:29:40

awk 对 shell 变量 i 一无所知,首先,为什么不使用:

awk "(NR >= $4) && (NR <= $5) {print}" $1

shell 本身应该扩展 $ > 变量,因为它们位于双引号内而不是单引号内(这当然取决于 shell,但涵盖了最流行的变量,主要是 bash)。

您可以在下面的文字记录中看到这一点:

====
pax$ cat infile
..1
..2
..3
..4
..5
..6
..7
..8
..9

====
pax$ cat qq.sh
#!/usr/bin/bash

awk "(NR >= $4) && (NR <= $5) {print}" $1

====
pax$ ./qq.sh infile junk junk 2 5
..2
..3
..4
..5

====
pax$ _

awk doesn't know anything about the shell variable i, for a start, Why would you just not use:

awk "(NR >= $4) && (NR <= $5) {print}" $1

The shell itself should expand the $ variables since they're within double quotes rather than single quotes (this is shell-dependent of course but covers the most popular ones, primarly bash).

You can see this in action in the following transcript:

====
pax$ cat infile
..1
..2
..3
..4
..5
..6
..7
..8
..9

====
pax$ cat qq.sh
#!/usr/bin/bash

awk "(NR >= $4) && (NR <= $5) {print}" $1

====
pax$ ./qq.sh infile junk junk 2 5
..2
..3
..4
..5

====
pax$ _
静若繁花 2024-11-08 15:29:40

这里正确的语法:

for ((  i = $2 ;  i <= $3;  i++  ))
do
   awk "NR==$i{print}" $1
done

Here proper syntax:

for ((  i = $2 ;  i <= $3;  i++  ))
do
   awk "NR==$i{print}" $1
done
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文