2013-02-05 51 views
0

我有一些線路有像殼GET字符串

1000 AS34_59329 RICwdsRSYHSD11-2-IPAAPEK-93  /ifshk5/BC_IP/PROJECT/T1 
1073/T11073_RICekkR/Fq/AS34_59329/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IP 
AAPEK-93_1.fq.gz  /ifshk5/BC_IP/PROJECT/T11073/T11073_RICekkR/Fq/AS34_5932 
9/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-93_2.fq.gz  /ifshk5/ 
BC_IP/PROJECT/T11073/T11073_RICekkR/Fq/AS34_59329/clean_111220_I631_FCC0E5EACXX_ 
L4_RICwdsRSYHSD11-2-IPAAPEK-93_1.fq.gz.total.info  11.824 0.981393 
43.8283 95.7401 OK 

相同的結構,我想獲得加粗部分,以檢查是否在/home/jesse/有這個文件夾,如果不能創造的mkdir /home/jesse/AS34_59329

我用這個代碼

! /bin/bash 
    myPath="/home/jesse/" 
    while read myline 
    do 
    dirname= echo "$myline" | awk -F ' ' '{print $2}' 
    echo $dirname 
    myPath= $myPath$dirname 
    echo $myPath 
    mkdir -p "$myPath" 

    done < T11073_all_3254.fq.list 

但不能的mkdir,並顯示路徑名,它顯示

-bash: /home/jesse/: is a directory 
/home/jesse/ 
AS39_59324 

回答

1

read可以讀取每個字段到一個單獨的變量,只有當它不存在mkdir -p將創建一個目錄:

path="/home/jesse" 
while read _ dir _ 
do 
    mkdir -p "$path/$dir" 
done < T11073_all_3254.fq.list 
+0

我更改了代碼,結果仍然相同 – AntiGMO

+0

您是否更改了代碼以合併此代碼,或者是否複製粘貼了此建議? –

+0

我發現原因是在awk中,它不能得到AS34_59329 – AntiGMO

0

for將迭代每個空白分隔的令牌。試試這個。

#!/usr/bin/env bash 
# Invoke with first arg as file containing the lines 
#  foo.sh <input_filename> 

for i in `cat $1 | cut -d " " -f2` 
do 
    if [ -d /home/jesse/$i ] 
    then 
     echo "Directory /home/jesse/$i exists" 
    else 
     mkdir /home/jesse/$i; 
     echo "Directory /home/jesse/$i created" 
    fi 
done 
+0

我改變了代碼,它仍然同樣的結果 – AntiGMO

+0

那你試試你得到了什麼結果? – jman