添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
慷慨的葡萄酒  ·  Azure OpenAI Service ...·  7 月前    · 
奔跑的水桶  ·  compression - Convert ...·  1 年前    · 
大力的充值卡  ·  Js ...·  1 年前    · 

在写shell脚本时,经常会使用到awk程序。但是有些复杂的逻辑,可能需要在awk中使用在shell中定义的变量,而且awk程序处理之后,产生的中间变量,还需要在shell中继续处理。

一、那如何在awk中使用在shell中定义的变量呢?

方法一: 使用"'把shell变量包起来,即"'$var'";注意是“ 双引号+单引号+shell变量+单引号+双引号 ”的格式。

这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法;这种写法其实际是双括号变为单括号的常量,传递给了awk.

var="abc"

awk ' BEGIN {print "'$var'"}'

方法二: 和方法一类似,但使用"'"把shell变量包起来,即"'"$var"'";注意是“ 双引号+单引号+ 双引号 +shell变量+ 双引号+单引号+ 双引号 ”的格式。

如果变量的值中包含空格,为了shell不把空格作为分隔符,则应使用方法二。

var="this a test"

awk ' BEGIN {print "'"$var "'" }'

方法三: export变量,然后在awk中使用 ENVIRON["var"] 形式获取环境变量的值

var="this a test"; export var;

awk ' BEGIN {print ENVIRON["var"]}'

二、那shell中如何使用awk程序中定义的变量呢?

“由awk向shell传递变量”,其思想无非是用awk(sed/perl等也是一样)输出若干条shell命令,然后再用shell去执行这些命令。

eval $(awk 'BEGIN{print "var1='str1';var2='str2'"}')
或者eval $(awk '{printf("var1=%s; var2=%s; var3=%s;",$1,$2,$3)}' abc.txt)


之后可以在当前shell中使用var1,var2等变量了。
echo "var1=$var1 ----- var2=$var2"

三、一个检测磁盘空间使用情况的脚本的例子

#!/bin/sh
#文件系统名字
FILE_SYSTEM_NAME="rootfs"

#文件系统挂在的目录
MOUNTED_ON="/"

# shell命令使用awk中定义的变量spaceSize
eval $(df -P | awk '$1=="'"$FILE_SYSTEM_NAME"'" && $6=="'$MOUNTED_ON'" {printf("spaceSize=%s;",$5)}')
echo "主磁盘的使用空间为$spaceSize"

spaceSize=`echo $spaceSize | cut -d% -f1`
if [ aa$spaceSize = "aa" ]; then
spaceSize=-1
fi

if [ $spaceSize -le 85 ]; then
echo '主磁盘的使用空间充足'
elif [ $spaceSize -eq -1 ]; then
echo '没有找到主磁盘使用空间,请检查脚本'
else
echo '主磁盘的使用空间超过阈值'
fi

在写shell脚本时,经常会使用到awk程序。但是有些复杂的逻辑,可能需要在awk中使用在shell中定义的变量,而且awk程序处理之后,产生的中间变量,还需要在shell中继续处理。一、那如何在awk中使用在shell中定义的变量呢?方法一:使用"'把shell变量包起来,即"'$var'";注意是“双引号+单引号+shell变量+单引号+双引号”的格式。这种写法大家无需改变 awk 是一种编程语言,用于在 linux /unix下对文本和数据进行处理。 数据可以来自标准输入、一个或多个文件,或其它命令的输出。 支持用户自定义函数和动态正则表达式等先进功能,是 linux /unix 下的一个强大编程工具。 在命令行 使用 ,但更多是作为 脚本 使用 awk 的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行
awk 引用 shell 变量 的方法,本例 引用 shell 变量 keyword,在keywrodr的外侧是双引号,在keyword内侧是单引号 #cat ./test.txt aabbccddeeffgghh112233/usr/bin/umount #keyword="mount" cat ./test.txt|grep $keyword| awk '{split($0,a,"/");if(a[4]=="'$keyword'")print a[1],a[4]}' 格式是这样的,双引号 单引号 $ke..
一、数值 变量 和字符串 变量 数值常量可以表示为整数(如243)、浮点数(如3.14)或用科学计数法表示的数(如。723E-1或3.4e7)。字符串则括在双引号 ,例如“Hello world”。 初始化与强制类型转换 只要在 awk 程序 被提到, 变量 就开始存在。 变量 可以是一个字符串或一个数字,也可以既是字符串又是数字。 变量 被设置后,就变成与等号右边那个表达式相同的类型。 未经初始化的 变量 的值是 0 或 “”,究竟是哪个取决于它们被 使用 时的上下文。 name = "Nancy" # name 是字符串.
本文翻译自StackOverflow提问—— “How do I use shell variables in an awk script?”,但更改了文章段落结构和部分表述。 方式1、 使用 -v 选项(最好的方式,兼容性最佳) 使用 -v选项(P.S. 记得在选项和 变量 名之间加上空格)
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建 变量 ,并按模式或者条件执行编辑命令。 sed命令常用于--整行的处理,而 awk 比较倾向于将一行分成多个“字段"然后再进行处理。 awk 信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。 在 使用 awk 命令的过程 ,可以 使用 逻辑操作符“&&”表示“与”、“11”表示“或”、 “!”表示“非”; 还可以进行简单的数学运算,如+、-、*、/、号、^分别表示加、减、乘、除、 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作。 数据可以来自标准输入也可以是管道或文件。 1.1. AWK 工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建 变量 ,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个""字段然后再进行处理。 awk 信息的读入也是逐行读取的,执行结果可以通过print的功 ​ 一个强大的文本分析工具,把文件逐行的读入,以空格为默认的分割符并将每行切片,切开的部分在进行分析处理。 1.基本用法 awk [选项参数] ‘pattern1 {action} pattern2 {action}…’ filename pattern :表示 AWK 在数据 查找的内容,就是匹配模式 action:在找到匹配内容时所执行的一系列命令。 -F 指定输入文件拆分隔离 -v 赋值一个用户定义 变量 范例:数据准备(/etc/passwd文件) 搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。 awk -F : '/^root
awk 是一种文本处理工具,可以用于对文本文件进行分析和处理。它的基本语法是: awk 'pattern {action}' file,其 pattern是匹配模式,action是对匹配到的行进行的操作。 awk 可以对文件进行分割、过滤、计算等操作,非常适合处理大量的文本数据。 awk 的常用选项包括: -F:指定分隔符,默认为制表符或空格。 -v:定义 变量 。 -f:指定 awk 脚本 文件。 常用的 awk 内置 变量 包括: $:表示整行文本。 $1、$2、$3等:表示第1、2、3列文本。 NF:表示当前行的列数。 NR:表示当前行的行号。 常用的 awk 命令包括: print:输出指定的文本。 printf:格式化输出。 if/else:条件判断。 for/while:循环语句。 gsub:替换文本。 substr:截取文本。 以上是 awk 的基本介绍,希望对您有所帮助。
Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded 97267 Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded weixin_38046004: 第一种方法报错了 Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded weixin_38046004: 现在解决了吗 我也是报错 Mac OS X安装libevent库报Install libevent bufferevent_openssl.c:60:10: fatal error: 'openssl/bio.h' file linux下如何使用自己安装的SunJDK替换默认的OpenJDK