讀我使用的cygwin上的Windows 7。我有一個包含所有文本文件的目錄,我想循環它,併爲每個文件(1,2)(2,2)和(3,2)保存前三行第二列的數據。使用awk來存儲數值多個文件
因此,代碼會像
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
100加1使用鴻溝從其他文件訪問數據,並存儲在數組中。這就是:
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
文件需要這樣做在一個循環中的所有文件的文件夾中,不太清楚如何去that.The棘手的部分是,$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'
「文件3」是FASTA文件和前兩行看起來像這樣
>gi|94986445|ref|NC_008011.1| Lawsonia intracellularis PHE/MN1-00, complete genome
ATGAAGATCTTTTTATAGAGATAGTAATAAAAAAATGTCAGATAGATATACATTATAGTATAGTAGAGAA
輸出可以只寫全部4讀取到一個隨機文件或者如果可能的話可以比較READ1, read2,read3,如果它匹配read4,即主名稱應匹配。在我的例子中:
沒有read1-3
匹配Lawsonia intracellularis
這是read4
的一部分。所以它只能打印成功或故障到文件。
樣本輸出
Actinobacillus_pleuropneumoniae_L20
Actinobacillus_pleuropneumoniae_serovar_3_JL03
Actinobacillus_succinogenes_130Z
Lawsonia intracellularis
Failture
對不起,我錯了約6讀取,只需要4實際。再次感謝您的幫助。
在這一行你缺少的字符'它應該是X1 [0] ='的awk「FNR == 1 {打印$ 2}」 $ file1'更好您發佈的完整代碼,這樣我可以發表評論它 – Raghuram 2012-03-16 03:40:19
更重要的是,我們展示了從3檔3線,$ 1,正確的值,那麼預期輸出。除非你隱藏了很多其他的東西,否則幾乎可以確定這可以在1 awk程序中完成。祝你好運。 – shellter 2012-03-16 03:48:49
AND; - )...你實際上是你的第一個3行代碼'X1 [0] = AWK ...'得到可用的數據?你稍後使用cmd替換,你不希望'x1 [0] = $(awk ...)'爲那些第一行嗎?並且let x1 [0]行與以下兩行不同。祝你好運。 – shellter 2012-03-16 03:51:47