linux命令使用笔记

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##*/}

上述获取的fnm2018.123.txt
5. 将一个文本文件中的全部行存入一个array
如果一个文本文件input.txt中的各行存在空格,如下:
# 2008 06 01 00 01 30.000 3110 103250.01.81 LYSPG 2008 06 01 00 01 34.200 LYSSG 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

【linux命令使用笔记】使用awk来实现上述过程:
awk -v nn=$objline '{if(NR==nn) print $0}'

    推荐阅读