如何在移动文件之前合并?

时间:2016-01-12 08:44:02

标签: bash awk merge

我有一些文件(几百万),我将文件列表保存在files.txt中,如下所示:

/home/user/1.txt
/home/user/2.txt
/home/user/3.txt
/home/user/4.txt
/home/user/5.txt

我需要移动所有,但在移动之前我必须合并。

我可以这样移动:

#!/bin/bash
for files in $(cat files.txt); do
    mv $files /home/user/hop/
done

我可以将所有内容与cat *合并,但我需要合并两个,如下所示:

1.txt and 2.txt merge --> 1.txt and move.
3.txt and 4.txt merge --> 3.txt and move.
5.txt                 --> 5.txt and move.

但我必须在移动之前合并,在/ home / user /,而不是在/ home / user / hop /

我该怎么做?

2 个答案:

答案 0 :(得分:1)

移动后可以使用$ cat file1 file2 file3 file4 file5 file6 > out.txt,也可以设置要合并的文件的顺序。

也适用于二进制文件。

答案 1 :(得分:1)

您可以使用此脚本:

while read -r f; do
   if ((++i % 2)); then
      p="$f"
   else
      cat "$f" >> "$p"
      mv "$p" /home/user/hop/
      rm "$f"
      unset p
   fi
done < list.txt

[[ -n $p ]] && mv "$p" /home/user/hop/