shell中数组的定义和使用
1. 将某个目录下的文件存在一个数组内
allfiles=((ls ${indir}/*.txt))
2. 自定义数组
arr=(00 01 02 03 04 05 06 07)
3. 遍历数组元素
for elem in ${arr[@]}
do
conmand
...
done
4. 获取数组的长度
num_elem=${#arr[@]}
shell中的最大向右删除
在某些情况下,我们想去掉路径单独获取文件名,那么就会用到最大向右删除
inf="../haha/apple/2018.123.txt"
fnm=${inf##*/}
上述获取的fnm
为2018.123.txt
5. 将一个文本文件中的全部行存入一个array
如果一个文本文件input.txt中的各行存在空格,如下:
# 2008 06 01 00 01 30.000 3110 10325 0.0 1.8 1
LYS PG 2008 06 01 00 01 34.200
LYS SG 2008 06 01 00 01 36.800
那么,arr1=($(cat input.txt))
的元素是这样的
[#, 2008, 06, 0, ...]
即shell解释器将空格当做元素的分割符,将文本中的所有元素作为array的元素加入array
- 那么,如何将带空格的各行文本存入array呢?修改
IFS
变量并未达到目标,因此只能采取“笨办法”了:通过循环,逐行赋值给array
# Algorithm 1
n=0
while read line1
do
lines[n]=$line1
let n++
done < input.txt
# Algorithm 2
n=0
for line1 in `cat input.txt`
do
lines[n]=line1
let n++
done
bash使用sed
输出指定行
objline=12
sed -n ''$objline'p' $inf
使用awk
来实现上述过程:
awk -v nn=$objline '{if(NR==nn) print $0}'