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文件夹然后放入文件

4

2 回答 2

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

最终单线:

这一行将帮助您获取所有文件名,然后它将所有这些获取的文件名复制到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
于 2013-02-04T07:17:48.183 回答
0

另一个纯粹的shell解决方案:

while read line; do
  set $line
  key=$1; shift
  dir=$1; shift
  test -d $dir || mkdir $dir
  mv $@ $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 $@ $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$
于 2013-02-04T16:21:49.133 回答