使用awk存储多个文件的列读取值

时间:2012-03-16 03:31:48

标签: file unix awk cygwin

我在 Windows 7 上使用 cygwin 。我有一个包含所有文本文件的目录,我想循环遍历它,并为每个文件(1,2)(2,2)和(3,2)保存前三行的第二列中的数据。

所以,代码就像是

  x1[0]=awk 'FNR == 1{print $2}'$file1

  x1[1]=awk 'FNR == 2{print $2}'$file1

  x1[2]=awk 'FNR == 3{print $2}'$file1

然后我想使用除以$x1加上1 的100来访问其他文件中的数据并将其存储在数组中。那就是:

let x1[0]=$x1[0]/100 + 1 

let x1[1]=$(x1[1]/100)+1

let x1[2]=$(x1[2]/100)+1

read1=$(awk 'FNR == '$x1[0]' {print $1}' $file2) 

read2=$(awk 'FNR == '$x1[1]' {print $1}' $file2)

read3=$(awk 'FNR == '$x1[2]' {print $1}' $file2)

对另一个文件执行相同的操作,但我们不需要$x1

read4=$(awk 'FNR == 1{print $3,$4,$5,$6}' $file3) 

最后,只需将所有这些值输出到文件,即read1-4

需要在文件夹中的所有文件的循环中执行此操作,不太确定如何去处理。棘手的部分是$file3的文件名取决于$file1的文件名,

所以如果$file1 = abc123def.fna.map.txt

$file3将为abc123def.fna

$file2在其中是硬编码的,并且在所有迭代中保持不变。

file1是一个.txt文件,其中一部分如下:

 99 58900
 16 59000
 14 73000

file2包含600行字符串。

'Actinobacillus_pleuropneumoniae_L20'
'Actinobacillus_pleuropneumoniae_serovar_3_JL03'
'Actinobacillus_succinogenes_130Z'

'file3'是 FASTA 文件,前两行看起来像这样

>gi|94986445|ref|NC_008011.1| Lawsonia intracellularis PHE/MN1-00, complete genome
ATGAAGATCTTTTTATAGAGATAGTAATAAAAAAATGTCAGATAGATATACATTATAGTATAGTAGAGAA

输出可以将所有4个读取写入随机文件,或者如果可能,可以比较read1,read2,read3以及它是否与read4匹配,即主名称应该匹配。在我的例子中:

read1-3没有一个与Lawsonia intracellularis的{​​{1}}匹配。因此,它只能将成功失败打印到文件中。

SAMPLE OUTPUT

read4

抱歉我对6次读取错了,实际上只需要4次。再次感谢您的帮助。

0 个答案:

没有答案