- 论坛徽章:
- 1
|
本帖最后由 qq493288977 于 2012-06-08 23:22 编辑
awk调用变量的一个总结
对我们菜鸟这还是个比较困惑的地方,但经过了就是你的了- #!/bin/sh
- touch test.txt
- >test.txt
- cat << eof >> test.txt 2>/dev/null
- settle:x:3004:1004:settlement:/home/settle:/usr/bin/ksh
- settlementid:x:3050:100::/home/settlementid:/usr/bin/csh
- settlemente:x:3055:100::/home/settlemente:/usr/bin/csh
- settlement:x:3060:100::/home/settlement:/usr/bin/csh
- eof
- g_user_name="settlement"
- ###全引用('')使得$是awk的meta 结果正确
- cat test.txt | grep ${g_user_name} | awk -F: '{print $6}'
- ####部分引用("")使得$是shell的meta 结果错误
- cat test.txt | grep ${g_user_name} | awk -F: "{print $6}"
- ###取消shell的$功能,这样awk识别了$ 结果正确
- cat test.txt | grep ${g_user_name} | awk -F: "{print \$6}"
- ###awk -F: '{if($1==settlement) print $6}' 结果错误
- cat test.txt | grep ${g_user_name} | awk -F: '{if($1=='${g_user_name}') print $6}'
- ###awk -F: '{if($1=="settlement") print $6}' 结果正确
- cat test.txt | grep ${g_user_name} | awk -F: '{if($1=='\"${g_user_name}\"') print $6}'
- ###awk -F: '{if($1==settlement) print $6}' 结果错误
- cat test.txt | grep ${g_user_name} | awk -F: "{if(\$1==${g_user_name}) print \$6}"
- ###awk -F: '{if($1=="settlement") print $6}' 结果正确
- cat test.txt | grep ${g_user_name} | awk -F: "{if(\$1==\"${g_user_name}\") print \$6}"
- ###推荐使用的方式 -v参数将arg变成awk内部变量,而且不能用$arg引用 结果正确
- cat test.txt | grep ${g_user_name} | awk -F: -v arg=${g_user_name} '{if($1==arg) print $6}'
- ###将a b c输出成a 'b' c
- ###Shell的处理策略是:得到一个单引号(‘)或者双引号(“),然后逐个字符向下读,直到读到单引号或双引号为止。
- ###单引号就全引用,忽略所以特色字符;双引号就部分引用,进行字符替换。
- ###接下来继续按照上面的策略读取剩余的字符。
- ###输出空格用,
- echo 'a b c' | awk "{print \$1"",\"'\""'$2'"\"'\","'$3'}
- echo 'a b c' | awk '{print $1'",\"'\""'$2'"\"'\","'$3'}
- ###使用printf函数
- echo 'a b c' | awk '{printf "%s %c%s%c %s\n",$1,39,$2,39,$3}'
复制代码 ps:向网中人致敬 |
|