2017-10-26 17 views
1

私は、ディレクトリ名とファイルに含まれるべきファイルをテキストファイルにリストアップしました。linuxディレクトリを作成し、対応するファイルをディレクトリに移動します

my text file: 
SRS000111 ERR1045156  
SRS000112 ERR1045188  
SRS00ERR1045204  
SRS000134 ERR1045237 ERR1045238 ERR1045239 
SRS000154 ERR1045255 ERR1045256 
SRS000168 ERR1045260 ERR1045261 ERR1045262 
...   ...   ... 
SRS001567 ERR1547451 ERR1547676 

ここで、テキストファイルの最初の列を使用してすべてのディレクトリを作成しますが、forループを実行する方法がわかりません。

for filename in cat file.txt | awk -F, '{print $1}'; do mkdir ${filename}; done 

ですがエラーになります。

second私はすべてのERRファイルを持っており、テキストファイルに従って対応するディレクトリに移動したいと思います。私はこの部分をどうやってやるか分からない。

+0

すべての行の列間の区切り文字は何を行うことができますか? –

+0

@ Karthikeyan.R.Sタブ –

答えて

1

あなたは私たちが最初の行すなわちヘッダ名のディレクトリを作成したくないのでが

awk 'FNR>1{system("mkdir \"" $1 "\""); for(i=2; i<=NF; i++) system("mv \"" $i "\" " "\"" $1 "\"")}' file 

FNR>1を行うだろうmkdirためのawkからsystemコールとmvファイル

こののawkをしなければなりませんCSVファイル

注:このコマンドは、前述のすべてのファイル名ソース/入力ファイルが存在します。これにより、そこにディレクトリが作成され、新しく作成されたディレクトリ内のすべてのファイルが移動されます。

+0

mv:ERR1045156をSRS000111/ERR1045156にリネームする:このようなファイルまたはディレクトリはありません。 –

+0

@PeterChung:ファイル 'ERR1045156'が置かれている場所からコマンドを実行していません。すべてのファイルが置かれている 'directory'に' cd'を実行して、私の元の答えで述べたようにこのコマンドを実行してください。 – batMan

1

ファイルを読み、フォルダ名の列とファイル名の列を分割し、ディレクトリと移動を作成することをお勧めします。

このスクリプトは、それを作る:

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    dir=$(echo "$line" | awk '{print $1}') 
    files=$(echo "$line" | awk '{$1=""; print $0}') 

    mkdir $dir 
    mv $files $dir/ 
done < myfile.txt 

が複雑にではなく、あなたがそれについて質問がある場合は、あなたが私にどんな質問

関連する問題