awk
2020-11-23 本文已影响0人
Zee_李海海
字段和记录分隔符变量
变量 | 描述 |
---|---|
FS | 输入字段分隔符,默认是空格 |
OFS | 输出字段分隔符 默认也是空格 |
RS | 输入行分隔符,默认为换行符 |
ORS | 输出行分隔符,默认为换行符 |
cat data.csv
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35
awk 'BEGIN{FS=",";OFS="_"} {print $1,$2}' data.csv |cat
data11_data12
data21_data22
data31_data32
#print命令会自动将OFS变量的值放置在输出中的每个字段间。通过设置OFS变量,可以在输出中使用任意字符串来分隔字段。
或者
awk -F "," '{print $1 "_" $2}' data.csv |cat
data11_data12
data21_data22
data31_data32
awk :-v使用方法(允许你在BEGIN代码之前设定变量)
cat test.csv
Rich Blum,team1,100,115,95
Barbara Blum,team1,110,115,100
Christine Bresnahan,team2,120,115,118
Tim Bresnahan,team2,125,112,116
vim test.sh
#!/bin/bash
for team in $(awk -F "," '{print $2}' test.csv |uniq)
do
awk -v i=$team 'BEGIN{FS=",";total=0}
{
if ($2==i)
{
total += $3+$4+$5 ;
}
}
END{
avg= total/6 ;
print "Total for " ,i, "is",total , ", the average is " , avg
}' test.csv
done
awk: if 语句的使用
awk编程语言支持标准的if-then-else格式的if语句。你必须为if语句定义一个求值的条件,并将其用圆括号()括起来。如果条件求值为TRUE,紧跟在if语句后的语句会执行。如果条件求值为FALSE,这条语句就会被跳过。可以用这种格式:
if (condition)
statement1
或者
if (condition) statement1
下面这个简单的例子演示了这种格式的。
cat data
10
5
13
50
34
awk '{if ($1 > 20) print $1}' data |cat
#并不复杂。如果需要在if语句中执行多条语句,就必须用花括号将它们括起来。
awk '{if ($1>20) {x= $1 * 2 ;print x}}' data |cat
awk '{if ($1 >20){x=$1 *2 ;print x} else {x=$1*5;print x}}' data |cat # if -then -else 用法
awk: for 循环求每一行的值得和以及平均值
cat data5
130 120 135 123 896
160 113 140 145 543
145 170 215 567 124
awk '{total=0;for (i=1;i<=5;i++) {total += $i} print total}' data5 |cat #求和
awk '{total=0;for (i=1;i<=5;i++) {total += $i} ; avg = total/5 ; print "Average is ",avg; print total}' data5 |cat #求和、求均值