awk 引用shell变量, 变量的作用域

http://blog.sina.com.cn/s/blog_63092e670100r4th.html

1. ''  单引号截断,注意:如果变量的值有空格的话,必须要加双引号""(参见上面的链接),否则空格会导致 cmd空格option空格params

2.ENVRION["varName"]

3.-v传递参数

 

 

GOOD:

http://www.cnblogs.com/chengmo/archive/2010/10/03/1841753.html

 

1. 格式如:awk ‘{action}’  变量名=变量值   ,这样传入变量可以在action中获得值,但不能在BEGIN{}中引用

var1="hahah"

echo |awk 'BEGIN{print "Begin:v1="v1} {print "ActionBody:v1="v1}' v1="$var1"

     输出结果

    Begin:v1=

    ActionBody:v1=hahaha

2.格式如:awk –v 变量名=变量值 [–v 变量2=值2 …] 'BEGIN{action}’  注意:用-v 传入变量可以在3种类型的action 中都可以获得到,但顺序必须要在  action前面。

echo |awk -v v1="haha" 'BEGIN{print "Begin:v1="v1} {print "ActionBody:v1="v1}'

 

 

 

 

格式如:awk ‘{action}’  变量名=变量值   ,这样传入变量,可以在action中获得值。 注意:变量名与值放到’{action}’后面。

[chengmo@localhost ~]$ echo | awk  'BEGIN{print test}' test="$test"         

这种变量在:BEGIN的action不能获得。

awk  -f "query.awk" idnums=10 test.dat

必须要在文件名前面

 

 

格式如:awk –v 变量名=变量值 [–v 变量2=值2 …] 'BEGIN{action}’ 

 

注意:用-v 传入变量可以在3中类型的action 中都可以获得到,但顺序在  action前面。

awk  -v idnums=10 -f "query.awk"  test.dat

 

 

 

 

1.单引号 双引号的区别

 

var1="hello"

 

awk 'script'    => 会把awk scrpit 原封不动的传递给AWK解释器

awk '{print $var1}'   =>ERROR,   $var1是shell变量,无法直接引用

 

awk "script"  => 先把awk script解析成 String 形式的 脚本(包括引用shell变量), 再传递给AWK解释器

awk "{print $var1}"   =>OK,   先把$var1是替换成shell变量的值,解析的结果"print hello" 再传递给AWK解释器

 

 

 

 

awk '{print $SHELL-VAR}'    SHELL-VAR的值来自shell变量

 

测试如下:

 

>index=2

>echo $index  ##输出是2

>echo "a b c d" | awk {'print $index'}   ERROR

 

 

var是shell变量,而awk是Linux中独立于shell的一个工具。在awk中如果要解析shell变量,需要将变量拿到awk的作用域外面来,即,先关闭awk的单引号,引用变量 后再次打开。

摘自 http://zhidao.baidu.com/question/273992965.html

 

>echo "a b c d" | awk {'print $'$index'}'   

 

 

 

 

在 Linux shell 脚本中进行字符串拼接是一项常见操作,可以通过直接使用变量和字符串连接符来完成。例如,可以将两个变量或字符串常量直接拼接在一起,也可以通过命令替换或表达式进行拼接。 ### 基本字符串拼接 最简单的拼接方式是将多个字符串或变量直接写在一起,由 shell 自动进行连接。例如: ```bash str1="Hello" str2="World" result="$str1$str2" echo "$result" ``` 该脚本将输出 `HelloWorld`,其中变量 `str1` 和 `str2` 被拼接在一起。这种方式适用于大多数基础的字符串操作需求。 ### 带分隔符的拼接 如果需要在拼接过程中添加空格、下划线或其他字符作为分隔符,可以在变量之间直接插入这些字符: ```bash str1="Hello" str2="World" result="$str1_$str2" echo "$result" ``` 该脚本将输出 `Hello_World`。这种拼接方式在构造文件名、日志信息或路径时非常实用。 ### 使用命令替换进行拼接 可以借助命令替换功能将命令执行结果嵌入字符串中,例如: ```bash date=$(date +%Y%m%d) filename="report_$date.txt" echo "$filename" ``` 该脚本将输出类似 `report_20231015.txt` 的文件名,其中 `$(date +%Y%m%d)` 用于获取当前日期并将其插入字符串中。这种方法在自动化脚本中广泛用于动态生成文件名或日志记录内容。 ### 字符串拼接与变量作用域 在函数或脚本内部进行字符串拼接时,需注意变量作用域问题。例如,在函数中拼接字符串并修改全局变量时,应确保变量在函数外部可见: ```bash prefix="user_" func() { suffix="123" global_var="$prefix$suffix" } func echo "$global_var" ``` 该脚本将输出 `user_123`,其中 `global_var` 是在函数内部拼接并赋值的全局变量。这种操作方式在构建复杂脚本逻辑时尤为重要。 ### 使用环境变量进行拼接 环境变量也可以参与字符串拼接,例如将 `PATH` 变量与新的路径拼接: ```bash export PATH="$PATH:/new/path" ``` 此操作将 `/new/path` 添加到 `PATH` 环境变量中,使得系统在查找可执行文件时包含新路径。这种方式常用于配置开发环境或添加自定义工具路径[^4]。 ### 使用 `awk` 拼接字符串 在 `awk` 中也可以进行字符串拼接,例如将多个字段拼接成一个新的字符串: ```bash echo "John Doe" | awk '{print $1 " " $2}' ``` 该命令将输出 `John Doe`,其中 `$1` 和 `$2` 分别代表输入的两个字段,并通过空格进行拼接。这种操作在处理日志文件或结构化文本时非常有用[^3]。 ### 使用 `tr` 或 `sed` 进行拼接辅助 虽然 `tr` 和 `sed` 主要用于字符替换和文本处理,但它们也可以作为拼接操作的辅助工具。例如,使用 `sed` 在字符串前后添加内容: ```bash echo "content" | sed 's/^/prefix_/' | sed 's/$/_suffix/' ``` 该命令将输出 `prefix_content_suffix`,其中 `^` 表示行首,`$` 表示行尾。这种操作方式适用于批量修改文件内容或日志信息。 ### 相关问题 1. 如何在 Linux shell 中使用命令替换构造动态字符串? 2. 如何在 shell 脚本中拼接路径字符串? 3. 如何在 awk 中进行字符串拼接? 4. 如何在 shell 函数中修改全局变量并进行字符串拼接? 5. 如何使用 sed 在字符串前后添加固定内容?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值