我有一个输入文件说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;
但这些似乎都不起作用..关于如何解决这个问题的任何想法?
答案 0 :(得分: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
使用--
选项,以便如果文件以-
开头,则不会将其解释为选项,但会按字面处理。
-p
或--parents
使mkdir
命令在目录存在时不输入错误,并在必要时创建父目录。
答案 1 :(得分: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