1.多行数据汇总为一行
1.txt |awk -v ORS='","' '1'
xargs < 1.txt
cat .txt |xargs //方法一、通过xargs命令完成
a=(cat 1.txt);echoa //方法二、整个文件读入一个变量,然后直接打印
sed -n '1h;1!H;${g;s/\n/ /g;p;}' 1.txt //方法三、使用sed把文件读入保持空间,到最后一行时,替换换行符为空格符
paste -d " " -s < 1.txt
cat 1.txt | paste -d " " -s
2.按行切分
split [-bl] file [prefix]
按行切分
split -l 200 1.txt
按大小切分
-b, --bytes=SIZE:对file进行切分,每个小文件大小为SIZE。可以指定单位b,k,m。
split -b 600k 1.txt
3.awk if 用法
awk '{if (1==1) print "A"; else if (1==2) print "B"; else print "C"}'
4.awk 同时匹配多个分割符
awk -F "[: , ]"
5.awk 求最大值,最小值,求和,求平均值
求最大值:awk 'BEGIN {max = 0} {if (1+0>max+0) max=1} END {print "", max}'
求最小值:awk 'BEGIN {min = 65536} {if (1+01} END {print "Min=", min}'
求和:awk '{sum+=1} END {print "Sum= ", sum}'
求平均值:awk '{sum+=1} END {print "Avg= ", sum/NR}'
6.awk 统计数字的分布区间
比如,
输入:
a 1
b 21
c 13
d 24
e 15
f 16
g 27
h 9
i 31
j 65
j 35
k 55
这些数字中,小于10的出现2次,10-20出现了3次,20-40出现了5次,大于40出现了2次。
如何按这个范围统计呢?
输出:
<10 2
10-20 3
20-40 5
>40 2
awk 'BEGIN{split("<10 10-20 20-40 >40",b)}{if(2<10)a[1]++;else if(2<20)a[2]++;else if($2<40)a[3]++;else a[4]++}END{for(i in a)print b[i],a[i]}'
7 同时两个变量循环执行while
file1
file2
while read -r -u 4 line1 && read -r -u 5 line2
do
echo line1
echoline2
echo "---------------------------------------------------------------------"
done 4<file1 5<file2