用awk如何读取shell命令行上的参数(参数可以是带空格的)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用awk如何读取shell命令行上的参数(参数可以是带空格的)相关的知识,希望对你有一定的参考价值。

例如:运行./shell.sh "aa bb" 2 "cc dd",在awk中直接打印出shell的命令行参数,打印效果为aa bb2cc dd

echo|awk cmd="$@" "print cmd"

追问

我的意思是通过awk能一次打印出每一个命令行参数,我这处理文本时用到了命令行参数

追答awk 'BEGIN for(i=0;i<ARGC;i++) print ARGV[i]'

awk 'BEGINfor(i=0;i<ARGC;i++) print ARGV[i]'

追问

这种处理不了带空格的命令行参数,如果用$@的话,就只能在BEGIN中打印命令行参数,在BEGIN后的结束后不能接任何的东西

参考技术A a=$1
b=$2
c=$3
awk 'print '$a'$1' file

在Ubuntu下编写shell脚本读取文件

参考技术A 需求功能:

创建测试用例文件 text :

创建shell脚本:

运行结果:

利用 awk 'ENDprint NR' [文件名] 来输出行数:

在shell脚本中添加该功能:

运行结果:

上面的shell文件只是把文件名写死在脚本中,并没有实际使用意义,所以需要编写一个指令来指定需要读取的文件,就像 vim [文件名] 一样

“$1” 代表第1个参数,也就是在 read 之后紧跟的参数,将其作为文件名传入:

将脚本移动至环境变量对应的目录中:(可以自己更改 /bin/xxx 来决定运行命令的名称,但注意不能重复)
sudo mv read /bin/read
然后添加运行权限:
sudo chmod 755 /bin/read

打开终端的目录可以是任何位置,通过以下命令即可运行shell脚本:
sudo read [文件路径]

同理,我们还可以自己为复杂指令编写shell脚本,来提高命令的使用效率,例如开关ss服务,打开锐捷客户端认证等等。

以上是关于用awk如何读取shell命令行上的参数(参数可以是带空格的)的主要内容,如果未能解决你的问题,请参考以下文章

shell awk如何输出文件的指定列

awk从入门到入土(23)awk内置变量ARGCARGC--命令行参数传递

awk从入门到入土(23)awk内置变量ARGCARGC--命令行参数传递

如何获得一个bash子进程的命令行上的进程id

如何将变量从 awk 传递到 shell 命令?

在Ubuntu下编写shell脚本读取文件