这里有一个文件如下:
我需要去掉前面的lane,那么我们来分析一下使用shell来解决的思路,grep和sed命令都是针对整行的内容进行提取的,因此无法对一行中的某个字段的内容进行修改,因此我们使用awk来解决这个问题,awk中有一些内置的方法,这里使用split来拆分字段,split()接收三个参数,第一个参数是字段,第二个参数是拆分后的数组名称,最后一个参数是separator分隔符,这里我将分隔符设置为lane,然后提取数组的第二个元素,这里需要注意的是数组是从1开始的,因此我们应该使用a[2]来提取后面的数字,那么解决的代码如下所示:
awk -F"\t" 'BEGIN{OFS="\t"} NR>1{split($0,a,"lane");print a[2]}' sample_list_B1S4.release.20181105>sample_list_B1S4.release.20181105.new
这里有几个点需要注意,第一个点是NR>1可以不去管第一行的内容,另一个要注意的是lane需要使用双引号来包围,因为在shell脚本语言中,单引号是强引用,双引号是弱引用,我们使用单引号的话,结果将非常奇怪,会将lane1按照字母进行拆分!这是因为在外层的连个单引号中间又出现了两个单引号,将内容切割成了两个部分!所以单引号里面不能再有单引号,双引号里面也不能再有双引号。