我有两个文件,其中包含以下内容
File1中
Line1file1
Line2file1
line3file1
line4file1
文件2
Line1file2
Line2file2
line3file2
line4file2
我希望将这些文件的内容合并到file3
文件3
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2
如何从bash中的一个文件和另一个文件中连续合并文件?
谢谢
答案 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
命令。这个想法是这样的:
grep
对每个文件的行进行编号。sed
删除文件名,并将行号放入以空格分隔的列中。sort -n
按行号排序,该行号是稳定的,并保留文件顺序。cut
删除行号并重定向到该文件。 修改:使用paste
要简单得多,但如果您的某个文件比另一个文件长,则会导致空行,此方法只会继续使用较长文件中的行。
答案 5 :(得分:0)
while read line1 && read -u 3 line2
do
printf "$line1\n" >> File3
printf "$line2\n" >> File3
done < File1 3<File2
您可以使用文件描述符从两个文件中读取并将每一行打印到输出文件中。