数组

https://blog.csdn.net/Jerry_1126/article/details/52027539

数组声明

declare -a array_name
declare -a nums=(1 2 3 4)
unset array_name 删除数组
unset nums[0] 删除元素
可以不实现声明,直接进行定义

数组定义

array_name = (1 2 3 4 5 6 name age) # 1
array_name[0]=asd # 2
array_name[2]=asda
array_name=([0]=asda [1]=qwea [2]=sqzd) # 3
str=”asda asda adsa qweq “
array_names=($str) # 4

求数组长度

${#array_name[@]}
${#array_name[*]}

求数组某个元素的长度

${#array_name[2]} 第三个元素的长度 # 1
expr length ${array_name[2]} # 2
echo ${array_name[2]} | wc -L # 3
echo -n ${array_name[2]} | wc -l # 4

数组索引

s=”A,B,C,D”
a=(echo $s | tr ',' ' ')
echo ${!a[@]}

数组遍历

names=(asda aqwe sda gsdf wqe)
for (( i=0;i<${#array_name[]};i++ )) 按索引遍历
do
echo ${array_name[$i]}
done
for i in ${array_name[
]] 不按索引遍历
do
echo $i
done

数组添加元素

array_name=(1 2 3 4)
array_name[4]=5 # 1 使用索引添加元素
old=(1 2 3 4)
new=(${old[*]} 5) # 构建新数组

sort

https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

以每一行作为一个单位,比较按照首字母依次比较,按照ASCII进行比较,升序排序
注意输出结果不是重定向到原始文件中,但可以使用-o参数重定向到原始文件中

-u: 去除重复行
-r: 降序排序
-n: 以数值进行排序, 而不是使用字符的ASCII排序
-b: 忽略每行前面的空白部分,从第一个字符开始算起进行排序
-f: 将小写字符都转换为大写字母进行排序,即忽略大小写的顺序。
-c: 检查文件是否已经排好序,如果乱序,返回第一个乱序的行信息,最后返回1
-t: 使用特定的(默认为空格)分隔符分割,配合-k使用
-k: 可以根据分隔符后的信息进行排序
-V:按照 chr1 chr2 chr3 chrX chr Y的顺序排列,即先按照字符,后按照字符串里的数字排序
还可以按照数字排序

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

注意中括号只是用于划分,实际写时不用写中括号
使用逗号划开的两部分,左边表示要排序字符串的开始字符位置,右边表示要排序字符串的结束位置。
不设置END部分,表示结束到行尾
有逗号,不设置FEND和CEND 默认为与FSTART同一列的字符串的串尾

-k2.1n,3.on 表示 使用从第2列的第1个字符开始,到第3列的最后一个字符结束之间的字符串 进行排序。
-k2.1, 表示 使用从第2列的第1个字符开始,到第2列的最后一个字符结束之间的字符串 进行排序
其中Modifer除了可以使用上述的参数n r b f 外还可以使用 i,表示忽略不可打印字符

还可以多层排序
sort -k1, -k2 file > sorted.file

Sniffit

目录下所有文件的绝对地址

  1. getdir(){
  2. for f in $1/*
  3. do
  4. if test -f $f
  5. then
  6. if `echo $f|grep -q '.*Clean.*gz'`
  7. then
  8. arr=(${arr[*]} $f)
  9. fi
  10. else
  11. getdir $f
  12. fi
  13. done
  14. }
  15. getdir /store/apple_RNAseq/apple_data

将目录下所有文件复制到另一个文件夹中

  1. cp $(find /oldboy/ -type f -name "*.sh") /tmp
  2. find -type f -name "*.sh" | xargs -i cp {} /tmp
  3. find -type f -name "*.sh" -exec cp {} /tmp \;
  4. find -type f -name "*.sh" | xargs cp -t /tmp