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 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}'

你可能感兴趣的:(linux命令使用笔记)