shell常用总结
awk中使用shell变量
awk与shell之间的变量传递方法:https://blog.csdn.net/bytxl/article/details/8621432
linux shell awk获得外部变量(变量传值)简介:https://www.cnblogs.com/chengmo/archive/2010/10/03/1841753.html
awk中使用shell命令
使用system调用或者管道调用/bin/bash:https://www.cnblogs.com/mfryf/p/3564779.html
awk中调用shell命令并且取得命令的返回值:http://blog.sina.com.cn/s/blog_93f7919c0102xov4.html
$ awk '{cmd="ls " $1 ">/dev/null 2>&1";rc=system(cmd);print "RC:", rc}' test
RC: 0
RC: 2
使用system比较方便
cat $BUILD_OUT/build.log | grep -E "^Install:" | awk -v out="$BUILD_OUT" '{system("cp -fv "$2" "out)}'
awk使用多个分隔符
[root@cxm ~]# cat 123
1111111111*222222222222222|33333333333#4444444444444&5555555555555555
# 根据上边的文件,我们可以以* |#& 为分隔符
[root@cxm ~]# awk -F '[*|#&]' '{print $3}' 123
33333333333
写二进制数据到文件
echo e799bee5baa653420a | xxd -r -ps > file
删除带空格的文件
find -type d -name ".svn" | sed -e "s/^/\'/g;s/$/\'/g" | xargs rm -frv
find -name ".git*" | sed -e "s/^/\'/;s/$/\'/" | xargs rm -frv
dd命令读裸分区和查看
busybox dd if=/dev/block/platform/hi_mci.1/by-name/deviceinfo of=/data/temp.img bs=1 skip=65792 count=100
busybox hexdump -C /data/temp.img
统计log中不同TAG占用大小
awk '{tag[$6]++;use[$6]+=length($0)} END{for(i in use) print use[i],tag[i],i}' Logcat-19.17.29.txt.2 | sort -h -k 1
linux中命令设置ip及网关
# 设置ip及子网掩码
ifconfig eth0 169.254.1.61 netmask 255.255.0.0
# 设置路由
route add default gw 169.254.255.255
# 查看
ifconfig
过滤多个字符串
grep -E -v '(xx|yy)' urfile
获取指定字符串行数
1、grep -nr AN_VERSION file.txt | awk -F: '{print $2}'
2、cat file.txt | awk '/AN_VERSION/ {print NR}'
输出最后一个参数
args=$#
lastargs=${!args}
echo $lastargs
echo ${!#}
echo $(eval echo "\$$#")
按行合并文件
1、awk 'NR==FNR{a[NR]=$0}NR>FNR{print a[FNR],$0}' file1 file2
2、paste file1 file2 > result-file
shell脚本,awk 根据文件某列去重并且统计该列频次
awk 'NR==FNR{a[$2]++}NR!=FNR&&++b[$2]==1{print $1,$2,a[$2]}' a a
解析:
a文件为
1 a
2 a
3 a
4 s
5 s
6 d
NR=FNR处理第一个文件a-----> {a[$2]++}
NR!=FNR&&++b[$2]==1{print $1,$2,a[$2]}
当NR!=FNR处理第二个文件 a
++b[$2]==1 ++b表示先自增,后赋值。就是第二列是重复的值,执行一次