3

次のような内容の temp.txt という入力ファイルがあります

  2013-08-13 /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-03-01
  2013-08-14 /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-03-02
  2013-08-15 /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-03-03
  2013-07-30 /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-07-30
  2013-07-31 /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-07-31
  2013-08-16 /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-08-13

このファイルを繰り返し処理し、行の先頭に指定された日付でディレクトリを作成し、日付の後に指定されたディレクトリ内のデータをこの特定のディレクトリに移動する必要があります..

例:最初の行では、私はする必要があります

mkdir "2013-08-13" 

その後

mv /data/PSG/LZ/INVENTORY_FORECAST/load_date=2013-03-01/  2013-08-13

私はそれをやろうとしています

  cat temp.txt | while read line ; do  mkdir "echo $line | awk '{print $0}'"; done;

を使用して行を配列として使用しようとしました

  cat temp.txt | while read line; do lineArray=($line) echo $line, ${lineArray[0]}, $lineArray[1];  done;

しかし、これらのどれも機能していないようです..この問題にアプローチする方法について何か考えはありますか?

4

2 に答える 2

6

行を 2 つの変数に読み取ることができます。例えば:

while read -r date path # reads the lines of temp.txt one by one, 
                        # and sets the first word to the variable "date", 
                        # and the remaining words to the variable "path"
do 
    mkdir -p -- "$date"  # creates a directory named "$date".
    mv -- "$path" "$date" # moves the file from the "$path" variable to the "$date folder"
done < temp.txt   # here we set the input of the while loop to the temp.txt file

この--オプションは、ファイルがそれで始まる場合-、オプションとして解釈されず、文字どおりに扱われるように使用されます。

-porは--parentsmkdirディレクトリが存在する場合にコマンドをエラーにしないようにし、必要に応じて親ディレクトリを作成するようにします。

于 2013-08-15T17:11:52.810 に答える
0

これは仕事をするはずです:

while read line
do
export dname=`echo $line | awk '{print $1}'`
mkdir -p "$dname"
export fname=`echo $line | awk '{print $2}'`
mv "$fname" "$dname"
done < temp.txt
于 2013-08-15T17:12:07.183 に答える