shell常用总结

shell常用总结

  • awk中使用shell变量
  • awk中使用shell命令
  • awk使用多个分隔符
  • 写二进制数据到文件
  • 删除带空格的文件
  • dd命令读裸分区和查看
  • 统计log中不同TAG占用大小
  • linux中命令设置ip及网关
  • 过滤多个字符串
  • 获取指定字符串行数
  • 输出最后一个参数
  • 按行合并文件

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表示先自增,后赋值。就是第二列是重复的值,执行一次

你可能感兴趣的:(脚本工具,shell)