在 bash 中将两个文件的内容合并为一个文件
merge contents of two files into one file in bash
我有两个包含以下内容的文件
文件 1
Line1file1
Line2file1
line3file1
line4file1
文件 2
Line1file2
Line2file2
line3file2
line4file2
我想将这些文件的内容合并到 file3 as
文件 3
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2
如何在 bash 中连续合并一个文件和另一个文件的文件?
谢谢
while read line1 && read -u 3 line2
do
printf "$line1\n" >> File3
printf "$line2\n" >> File3
done < File1 3<File2
您可以使用文件描述符,从两个文件中读取并将每一行打印到输出文件。
在Linux中:
grep -En '.?' File1 File2 | sed -r 's/^[^:]+:([^:]+):(.*)$/ /g' \
| sort -n | cut -d' ' -f2- > File3
如果您使用的是 OS X,请对 sed
命令使用 -E
而不是 -r
。思路是这样的:
- 使用
grep
为每个文件的行编号。
- 使用
sed
删除文件名并将行号放入 space 分隔的列中。
- 使用
sort -n
按行号排序,稳定且保留文件顺序。
- 用
cut
删除行号并重定向到文件。
编辑: 使用 paste
更简单,但如果您的文件中的一个文件比另一个文件长,则会导致空行,此方法只会继续行从较长的文件。
您可以随时使用 paste
命令。
paste -d"\n" File1 File2 > File3
$ 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
paste
是解决此问题的方法,但如果您需要添加额外条件或不想在一个文件包含更多条件时以空行结尾,则此替代方法可能是一种有用的方法比其他行或其他任何使它成为更复杂问题的行:
$ awk -v OFS='\t' '{print FNR, NR, [=10=]}' file1 file2 | sort -n | cut -f3-
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2
我有两个包含以下内容的文件
文件 1
Line1file1
Line2file1
line3file1
line4file1
文件 2
Line1file2
Line2file2
line3file2
line4file2
我想将这些文件的内容合并到 file3 as
文件 3
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2
如何在 bash 中连续合并一个文件和另一个文件的文件?
谢谢
while read line1 && read -u 3 line2
do
printf "$line1\n" >> File3
printf "$line2\n" >> File3
done < File1 3<File2
您可以使用文件描述符,从两个文件中读取并将每一行打印到输出文件。
在Linux中:
grep -En '.?' File1 File2 | sed -r 's/^[^:]+:([^:]+):(.*)$/ /g' \
| sort -n | cut -d' ' -f2- > File3
如果您使用的是 OS X,请对 sed
命令使用 -E
而不是 -r
。思路是这样的:
- 使用
grep
为每个文件的行编号。 - 使用
sed
删除文件名并将行号放入 space 分隔的列中。 - 使用
sort -n
按行号排序,稳定且保留文件顺序。 - 用
cut
删除行号并重定向到文件。
编辑: 使用 paste
更简单,但如果您的文件中的一个文件比另一个文件长,则会导致空行,此方法只会继续行从较长的文件。
您可以随时使用 paste
命令。
paste -d"\n" File1 File2 > File3
$ 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
paste
是解决此问题的方法,但如果您需要添加额外条件或不想在一个文件包含更多条件时以空行结尾,则此替代方法可能是一种有用的方法比其他行或其他任何使它成为更复杂问题的行:
$ awk -v OFS='\t' '{print FNR, NR, [=10=]}' file1 file2 | sort -n | cut -f3-
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2