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 在字符串前后添加固定内容?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值