我有一個檔案串列(總共 15 個),除了以粗體突出顯示的第四個世界外,所有檔案名都采用相同的格式。
Late_Tox_GWAS.**TelangiectasiaG1**_resid.glm.linear
Late_Tox_GWAS.**AtrophyG1**_resid.glm.linear
Late_Tox_GWAS.**AtrophyG2**_resid.glm.linear
Late_Tox_GWAS.**IndurationG1**_resid.glm.linear
等等...
所有這些檔案都位于 /scrat/genome/hj86/Late_Tox_GWAS/*_resid.glm.linear
所有這些檔案都具有相同數量的具有相同列名的列。我想過濾第 7 列中的所有這些檔案以查找“ADD”。我已經運行了這個示例命令來過濾第 7 列,這樣每個檔案都會發生這種情況,然后這些檔案應該保存到單獨的相應檔案中,例如下一個是 AtrophyG1_resid_ADD,下一個是 AtrophyG2_resid_ADD 等...
我是回圈的新手,不知道如何編碼以便讀入每個單獨的毒性,也不知道如何指定檔案名的唯一位以便處理每個檔案并將結果保存到相應的唯一的檔案名。我將不勝感激任何幫助。
#!/bin/bash
#PBS -N Late_Tox_regression_ADD
#PBS -l walltime=01:00:00
#PBS -l nodes=1:ppn=8
#PBS -l vmem=16gb
#PBS -m bea
#PBS -M my email address
set -x
for fname in /scrat/genome/hj86/Late_Tox_GWAS/*_resid.glm.linear
do
tox="${fname#*.}"
tox="${tox%%_*}"
awk 'NR==1 || $7 == "ADD"{print}' "${fname}" > "${tox}_resid_ADD"
done
我沒有得到任何輸出,只是一個檔案說:
for fname in '/scratch/genomeqol/hkj7/Late_Tox_GWAS/*_resid.glm.linear'
tox=AtrophyG1_resid.glm.linear
tox=AtrophyG1
awk 'NR==1 || $7 == "ADD"{print}' /scratch/genomeqol/hkj7/Late_Tox_GWAS/Late_Tox_GWAS.AtrophyG1_resid.glm.linear
for fname in '/scratch/genomeqol/hkj7/Late_Tox_GWAS/*_resid.glm.linear'
tox=AtrophyG2_resid.glm.linear
tox=AtrophyG2
awk 'NR==1 || $7 == "ADD"{print}' /scratch/genomeqol/hkj7/Late_Tox_GWAS/Late_Tox_GWAS.AtrophyG2_resid.glm.linear
for fname in '/scratch/genomeqol/hkj7/Late_Tox_GWAS/*_resid.glm.linear'
tox=IndurationG1_resid.glm.linear
tox=IndurationG1
awk 'NR==1 || $7 == "ADD"{print}' /scratch/genomeqol/hkj7/Late_Tox_GWAS/Late_Tox_GWAS.IndurationG1_resid.glm.linear
for fname in '/scratch/genomeqol/hkj7/Late_Tox_GWAS/*_resid.glm.linear'
tox=Induration_G2_resid.glm.linear
tox=Induration
awk 'NR==1 || $7 == "ADD"{print}' /scratch/genomeqol/hkj7/Late_Tox_GWAS/Late_Tox_GWAS.Induration_G2_resid.glm.linear
uj5u.com熱心網友回復:
對于檔案所在的位置以及我們正在處理的檔案數量有點困惑:
FILEPATH/${tox}/*.glm.linear*似乎表明每個${tox}檔案都有一個單獨的子目錄,但可能有幾個檔案在所述子目錄中for entry in FILEPATH/${tox}/*.glm.linear*似乎暗示在這個目錄 (FILEPATH/${tox}) 中可能有多個檔案要處理,但entry從未在代碼中的其他任何地方參考,因此......- 我們最終可以處理
Late_Tox_GWAS.{tox}_resid.glm.linear多次命名的檔案(即,每個entry=*.glm.linear*檔案一次)
假設:
- OP 知道如何定位要處理的檔案串列(對于示例代碼,我將使用
find命令作為示例) - 所有輸出都寫入“當前”目錄(否則可以修改示例代碼以寫入正確的目錄)
一種使用引數替換從檔案名中提取所需字串的想法,然后使用它來運行 OP 的awk腳本:
while read -r fname
do
tox="${fname#*.}" # strip off all characters from the front of the string up to and including the first "."
tox="${tox%%_*}" # strip off all characters from the first "_" to the end of the string
awk 'NR==1 || $7 == "ADD"{print}' "${fname}" > "${tox}_resid_ADD"
done < <(find FILEPATH -name "*.glm.linear" -type f)
在我替換FILEPATH為dir3/sdir2(4x*.glm.linear檔案的位置)的環境中,此代碼執行了以下命令:
awk NR==1 || $7 == "ADD"{print} dir3/sdir2/Late_Tox_GWAS.AtrophyG1_resid.glm.linear > AtrophyG1_resid_ADD
awk NR==1 || $7 == "ADD"{print} dir3/sdir2/Late_Tox_GWAS.AtrophyG2_resid.glm.linear > AtrophyG2_resid_ADD
awk NR==1 || $7 == "ADD"{print} dir3/sdir2/Late_Tox_GWAS.IndurationG1_resid.glm.linear > IndurationG1_resid_ADD
awk NR==1 || $7 == "ADD"{print} dir3/sdir2/Late_Tox_GWAS.TelangiectasiaG1_resid.glm.linear > TelangiectasiaG1_resid_AD
導致在我的當前目錄中創建以下檔案:
$ ls -1 *resid*ADD
AtrophyG1_resid_ADD
AtrophyG2_resid_ADD
IndurationG1_resid_ADD
TelangiectasiaG1_resid_ADD
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343086.html
上一篇:Terraform動態組創建
