在bash中将两个文件的内容合并到一个文件中

时间:2015-02-25 17:41:29

标签: linux bash awk sed merge

我有两个文件,其中包含以下内容

File1中

Line1file1
Line2file1
line3file1
line4file1

文件2

Line1file2
Line2file2
line3file2
line4file2

我希望将这些文件的内容合并到file3

文件3

Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

如何从bash中的一个文件和另一个文件中连续合并文件?

谢谢

6 个答案:

答案 0 :(得分:8)

您始终可以使用paste命令。

paste -d"\n" File1 File2 > File3

答案 1 :(得分:2)

$ cat file1
Line1file1
Line2file1
line3file1
line4file1

$ cat file2
Line1file2
Line2file2
line3file2
line4file2

$ paste -d '\n' file1 file2 > file3

$ cat file3
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

答案 2 :(得分:2)

paste是实现这一目标的方法,但是如果您需要添加额外条件或者当一个文件有更多文件时不希望以空白行结束,则此备选方案可能是一种有用的方法线条比其他线条或其他任何使其成为更复杂问题的线条:

$ awk -v OFS='\t' '{print FNR, NR, $0}' file1 file2 | sort -n | cut -f3-
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

答案 3 :(得分:2)

没有那么复杂,但它确实起作用了:

|   idUserType   |   idOption   |  allow   |
|----------------|--------------|----------|
|         2      |        1     |  true    |
|         2      |        2     |  true    |

答案 4 :(得分:1)

在Linux中:

grep -En '.?' File1 File2 | sed -r 's/^[^:]+:([^:]+):(.*)$/\1 \2/g' \
    | sort -n | cut -d' ' -f2- > File3

如果您使用的是OS X,请使用-E而不是-r作为sed命令。这个想法是这样的:

  1. 使用grep对每个文件的行进行编号。
  2. 使用sed删除文件名,并将行号放入以空格分隔的列中。
  3. 使用sort -n按行号排序,该行号是稳定的,并保留文件顺序。
  4. 使用cut删除行号并重定向到该文件。
  5. 修改:使用paste要简单得多,但如果您的某个文件比另一个文件长,则会导致空行,此方法只会继续使用较长文件中的行。

答案 5 :(得分:0)

while read line1 && read -u 3 line2
do 
    printf "$line1\n" >> File3
    printf "$line2\n" >> File3
done < File1 3<File2

您可以使用文件描述符从两个文件中读取并将每一行打印到输出文件中。