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 )を取得して、フォルダが作成されていない場合はフォルダを作成するにはどうすればよいですか。

行の 2 番目のセクション AS35_59328 を取得します。AS35_59328 が既に存在する場合は、行内のすべてのファイルをフォルダーに入れます。そうでない場合は、AS35_59328 フォルダーを作成してからファイルを入れます

4

2 に答える 2

0

別の純粋なシェル ソリューション:

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 に答える
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

最終的なワンライナー:

この 1 つのライナーは、すべてのファイル名を取得するのに役立ち、取得したすべてのファイル名を にコピーします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 に答える