2013-02-04 96 views
0

文件有很多行,每行包含殼創建新的目錄,並檢查它是否存在

INT文件夾名稱文件路徑文件路徑文件路徑

如。

1001 AS35_59328  RICwdsRSYHSD11-2-IPAAPEK-93  /ifshk5/BC_IP/PROJECT/T1 
1073/T11073_RICekkR/Fq/AS35_59328/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IP 
AAPEK-93_1.fq.gz  /ifshk5/BC_IP/PROJECT/T11073/T11073_RICekkR/Fq/AS35_5932 
8/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-93_2.fq.gz 
/ifshk5/BC_IP/PROJECT/T11073/T11073_RICekkR/Fq/AS35_5932 
8/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-9322121_2.fq.gz 

因此如何獲取文件夾名稱(AS35_59328)並創建文件夾(如果未創建)。

得到行第二部分AS35_59328,如果AS35_59328早已存在,把所有文件的行成文件夾,否則創建AS35_59328文件夾,然後把文件放到

+1

'cut' +'mkdir'? –

+0

你能解釋一下你的問題嗎? – Suku

回答

0

另一個純粹殼溶液:

while read line; do 
    set $line 
    key=$1; shift 
    dir=$1; shift 
    test -d $dir || mkdir $dir 
    mv [email protected] $dir 
done < myfile.txt 

    bll-laptop:bll$ cat t.sh 
    #!/bin/bash 

    cat > myfile.txt << _HERE_ 
    1001 d1 a b c 
    1002 d2 d e f 
    1003 d3 g h i 
    _HERE_ 

    touch a b c d e f g h i 
    rm -rf d1 d2 d2 > /dev/null 2>&1 
    mkdir d1 

    while read line; do 
     set $line 
     key=$1; shift 
     dir=$1; shift 
     test -d $dir || mkdir $dir 
     mv [email protected] $dir 
    done < myfile.txt 

    ls -R 

    bll-laptop:bll$ ./t.sh 
    .: 
    d1 d2 d3 myfile.txt t.sh 

    ./d1: 
    a b c 

    ./d2: 
    d e f 

    ./d3: 
    g h i 
    bll-laptop:bll$ 
0
$ cat stack.txt 
1001 AS35_59328  RICwdsRSYHSD11-2-IPAAPEK-93  /ifshk5/BC_IP/PROJECT/T1 
1073/T11073_RICekkR/Fq/AS35_59328/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IP 
AAPEK-93_1.fq.gz  /ifshk5/BC_IP/PROJECT/T11073/T11073_RICekkR/Fq/AS35_5932 
8/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-93_2.fq.gz 
/ifshk5/BC_IP/PROJECT/T11073/T11073_RICekkR/Fq/AS35_5932 
8/111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-9322121_2.fq.gz 


$for j in $(for i in `cat stack.txt | tr '\n' '\0' | grep -a -o '/.*gz'`; do echo $i ;  done | awk -F\/ '{ print $NF }'); do echo $j ; done 
111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-93_1.fq.gz 
111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-93_2.fq.gz 
111220_I631_FCC0E5EACXX_L4_RICwdsRSYHSD11-2-IPAAPEK-9322121_2.fq.g 

最終oneliner:

這一行代碼將幫助您獲取所有文件名,然後它會將所有提取的文件名複製到AS35_59328。如果AS35_59328不存在,它將創建這樣一個目錄,然後它將把所有這些文件放入它。

if [ -d "AS35_59328"]; then for j in $(for i in `cat stack.txt | tr '\n' '\0' | grep -a -o '/.*gz'`; do echo $i ; done | awk -F\/ '{ print $NF }'); do cp -v $j AS35_59328/ ; done ; else for j in $(for i in `cat stack.txt | tr '\n' '\0' | grep -a -o '/.*gz'`; do echo $i ; done | awk -F\/ '{ print $NF }'); do mkdir AS35_59328 && cp -v $j AS35_59328/ ; fi 
相關問題