1、rev(将文本横向倒置)
取出下面11文档中等号后面的内容,并且去掉每行内容最后3个字符,这个通过一个简单的rev命令便可以很容易实现
2、tac(将文本纵向倒置)
通常可以合sed结合,将多个文本的最后一行或者多行替换掉
总结:shell许多命令都是顺序处理文本,针对逆序处理的情况似乎不好定位,但是有了上面两个命令,很多情况就明朗啦,所谓“负负得正”的原理,嘿嘿
3、awk中让数组下标有序输出和数组value有序输出
一般做法:awk '{b[$1]=$2}END{for(i in b)print i,b}' 此时输出的数组下标不是文件里原有的顺序,也就是乱序了。
解决办法:awk '{a[$1]=$2;c[j++]=$1}END{for(m=0;m<j;m++)print c[m],a[c[m]]}'
当然c了上面的方法外,还有一个更简便的方法用asorti()函数来实现,原理是一样的
78 90
23 45
awk '{a[$1]=$2}END{slen=asorti(a,b);for(i=1;i<=slen;i++) print i"\t"b[i]"\t"a[b[i]]}' test
假如要做数组value排序呢?asorti类似的一个方法asort可以实现,例子如下
个人认为此函数用处不多,因为将原来的数组下标给丢掉了,如果想对value排序,又不丢掉数组下标,将awk的结果用shell下的sort命令实现更加人性化,可能多了一层管道,效率会相对低一些。
总结下awk的两排序函数区别:
4:shell下的数组:注:BASH只支持一维数组,但参数个数没有限制。
声明一个数组:
declare -a array
(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组)
数组赋值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
arrya[1]=var2
...
array[n]=varN
计算数组元素个数:${#array[@]} 或者 ${#array[*]}
BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。
输出数组所有元素:echo ${array[@]} 或者 ${array[*]}
引用数组元素:echo ${array[n]}
清除指定的单个数组元素:unset array[n]
清除整个数组:unset array
遍历数组:
filename=(`ls`)
for var in ${filename[@]};do
echo $var
done
数组实用示例:
1、将字符串里的字母逐个放入数组,并输出到“标准输出”
chars='abcdefghijklmnopqrstuvwxyz'
for (( i=0; i<26; i++ )) ; do
array[$i]=${chars:$i:1}
echo ${array[$i]}
done
${chars:$i:1},表示从chars字符串的 $i 位置开始,获取 1 个字符类似awk下的substring函数。
2、如何用变量来替换数组名?下面例子为获取flag值对应的cdntype(cdn01中的元素,cdntype=1 ...cdn05中的元素 cdntype=5)
cdn01=("koram" "batheo" "batheoeu" "jpas" "asth" )
cdn02=("askr")
cdn03=("zsml")
cdn03=("wiyou")
cdn05=("zspt" "zsru" "zsfr" "zses" "de" "zsit")
for i in {1..5}
do
cdn="cdn0$i"
for num in $(eval echo \${$cdn[@]}) //实现用变量来替换数组名,并且获取数组的所有元素
do
if [ $num == "$flag" ];then
cdntype=$i
break
fi
done
done
5:eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。
一个极其简单的例子可以说明
(详情可参照该链接http://www.cnblogs.com/huzhiwei/archive/2012/03/14/2395956.html)
6:grep 比较2个文件差异
grep -vwf file1 file2 (file2中存在file1中不存在的)
grep -wf file1 file2(提取公共部分)
grep -vwf file1 file2 && -vwf file2 file1(提取文件不同部分)
转载于:https://blog.51cto.com/5007260/1316163