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;

尝试使用 line 作为数组使用

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

但这些似乎都不起作用..关于如何解决这个问题的任何想法?

4

2 回答 2

6

您可以将这些行读入两个变量。例如:

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--parents使命令在mkdir目录存在时不出错,并在必要时创建父目录。

于 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 回答