awk脚本
‘壹’ 脚本awk问题
不用逗号时,代表连接(awk里默认空格是连接符),第一式里应该是空格被哪里吃掉了没贴出来,正确应该是这样:
awk
'{print
$1
"\t"
$2
"\t"
$3}'
names
其中\t代表制表符,及TAB键产生的字符。这里意思是直接插入制表符打印前三列数据。
而式2用逗号隔开的,又是分别的需要显示出的东西,逗号的地方印出时会用指定的分隔符显示,没指定时默认是空格,指定的话就会是其它的,如你可以执行下这个看效果:
awk
'BEGIN{OFS="@"}{print
$1,"name"
$2,"age"
$3}'
names
同理中间空格应该也是丢了,可能会执行出错,我补上了。
区别是第一个命令执行结果是以TAB符分隔的,而第二个命令是以一个空格跟一个TAB分隔的,即后一命令的结果是用两个符号分隔的。
你可以输出到文件,然后拿到其它文件编辑器下查看确认一下
‘贰’ 怎么定义一个文件为awk脚本
楼上的说的很对,不需要什么头语句,你可以直接在里面写你的函数,不过得按照AWK的语法写,可以保存成xxx.awk。
然后在shell脚本中:awk
-f
xxx.awk即可,或者你要给AWK脚本文件中传shell的变量的话,你也可以这样:awk
-v
var=${xx}
-f
xxx.awk
当然-v是传参数,-f是指定awk脚本。
下面是我在网络文库中上传的关于AWK的一篇文章,你也可以参考下:http:/
/wenku..com/view/2ff6c024ccbff121dd368355.html
‘叁’ 如何在shell脚本里传递一个变量给awk
先说简单的,如果是只传递变量,有几种方法:
awk '{print v1, v2}' v1=$VAR1 v2=$VAR2 input_file
# 或者,这种方法不是所有的awk分支都支持
awk -v v1=$VAR1 -v v2=$VAR2 '{print v1, v2}' input_file
# 或者,这种写法是最难受的
awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file
把变量用在正则里面的方法:
awk ' $0 ~ v1; {print v2}' v1=$VAR1 v2=$VAR2 input_file
‘肆’ awk循环处理文件的脚本
不用awk啊,因为外面有个循环一行一行读取数据,里面只处理一个字串就行,
也就是分割字串,按照分割符“|”。
cat~/log.txt|whilereadline
do
ipaddr=`echo$line|cut-d"|"-f1`
pwd=`echo$line|cut-d"|"-f2`
echo$ipaddr
echo$pwd
done
‘伍’ 怎样执行awk脚本文件 如:要执行 error_strip.awk 脚本文件
awk脚本文件开头一般都是这样的:#!/bin/awk -f
已经指明了 -f 选项。
执行时,直接在error_strip.awk 后面加要处理的文件名作为参数即可。
‘陆’ 求写个awk脚本
awk_calc.sh 内容如下:
#!/usr/bin/awk -f
BEGIN { FS = "(<)|(ms)" }
{
sum += $2;
if ($2 > max) max = $2;
if (NR == 1)
min = $2;
else
if ($2 < min) min = $2;
}
END {
average = sum / NR;
printf("Maximum: %dms\nAverage: %.2fms\nMinimum: %dms\n", max, average, min);
}
先用 chmod +x awk_calc.sh 给这个脚本赋予可执行权限。
然后执行 ./awk_calc.sh test.log 即可。
‘柒’ linux awk脚本问题
不对呀,我的怎么就可以呢?
我的data 文件:
herry 樱桃
orange 橙子
olive 橄榄
areca 槟榔
coconut 椰子
nectarine 蜜桃
mandarin 蜜橘
pineapple 菠萝
grapes 葡萄
raisins 葡萄干
pear 梨
ginko 银杏
cane 甘蔗
fruit 水果
figs 无花果
bessemyanka 无籽梨
grenades 石榴
mango 芒果
apricot 杏子
apple 苹果
plum 李子
gale 杨梅
calamondin 金橘
medlar 枇杷
banana 香焦-苹果
gout 草莓
banana 香焦
lychee 荔枝
pomelo 柚子
hamiskaya 哈密瓜
lemon 柠檬
peach 桃子
估计是你的脚本中末行有空格?你看我显示的:
Press "ctrl-d" to exit
香蕉 的英文生字是:
Try again!
Try again!
Try again!
banana
You are right !! Press Enter to Continue ---
‘捌’ awk脚本怎么调用
如果你的脚本名称是delay.awk,把这个文件和你要输入的.tr文件放在同一目录下,ns中使用调用命令:
gawk -f delay.awk filename.tr
filename为你要输入的文件夹
‘玖’ 谁能详细解析一下这行带awk命令的SHELL脚本
Linux下脚本的第一行#! 是指明本脚本使用哪个解释器来执行当前脚本,从头文件看出这个一个awk脚本,第一行的意思可以理解为 使用 /usr/bin/awk -f 脚本名 来执行当前脚本:
比如脚本:test.awk的第一行是#!/usr/bin/awk -f那么执行这个脚本的时候就会根据第一行去寻找解释器,效果相当于在shell下执行
/usr/bin/awk -f test.akw
这里的-f是awk命令的一个参数,是从文件中读取脚本执行的意思.
‘拾’ 如何执行这个awk脚本
印象中执行awk的文件应该是在命令行输入awk -f 文件名。 shell脚本那个问题,需要把xx.sh设置为可执行的,chmod u+x xx.sh,然后才可以用./xx.sh