如何合并两个文件中的行?
How to combine rows from two files?
我有文件 1:
1
5
4
和文件 2:
44
65
56
我想file.out:
1
44
5
65
4
56
谢谢
使用带有自定义分隔符 \n
的 paste
即换行符:
paste -d '\n' file1 file2 > file.out
或 GNU sed:
sed 'R file2' file1
或 awk:
awk 'NR==FNR{a[NR]=[=12=];next} {print a[FNR]} 1' file1 file2
paste
是更好的方法,但是使用 awk 可以在读取某个文件时使用 getline
从另一个文件读取:
awk -v f2="file2" '{print; getline < f2; print;}' file1
能否请您尝试以下解决方案,它可以工作超过 2 Input_file(s) 以防您也有。
awk 'FNR==NR{a[FNR]=[=10=];next} {a[FNR]=(a[FNR]?a[FNR] ORS:"")[=10=]} END{for(i=1;i<=FNR;i++){print a[i]}}' Input_file1 Input_file2
编辑: 添加 1 个更通用的解决方案,我们可以将 N 个文件传递给它而且它不假设该数字所有 Input_file(s) 中的行数相同,它从所有文件中获取最大行数并将打印匹配行(所有文件中的行号)并将打印行(数量更多最后也是任何文件),以防OP的文件有这种情况。
假设我们有 3 个名为 file1、file2 和 file3 的文件,如下所示。
cat Input_file1
1
5
4
cat Input_file2
44
65
56
cat Input_file3
1
2
3
4
5
6
下面是代码。
awk '
prev!=FILENAME{
count=count>prev_count?count:prev_count
}
{
prev_count=FNR
}
FNR==1{
prev=FILENAME
}
FNR==NR{
a[FNR]=[=12=]
next
}
{
a[FNR]=(a[FNR]?a[FNR] ORS:"")[=12=]
}
END{
count=count>prev_count?count:prev_count
for(i=1;i<=count;i++){
print a[i]
}
}' Input_file1 Input_file2 Input_file3
输出如下。
1
44
1
5
65
2
4
56
3
4
5
6
我有文件 1:
1
5
4
和文件 2:
44
65
56
我想file.out:
1
44
5
65
4
56
谢谢
使用带有自定义分隔符 \n
的 paste
即换行符:
paste -d '\n' file1 file2 > file.out
或 GNU sed:
sed 'R file2' file1
或 awk:
awk 'NR==FNR{a[NR]=[=12=];next} {print a[FNR]} 1' file1 file2
paste
是更好的方法,但是使用 awk 可以在读取某个文件时使用 getline
从另一个文件读取:
awk -v f2="file2" '{print; getline < f2; print;}' file1
能否请您尝试以下解决方案,它可以工作超过 2 Input_file(s) 以防您也有。
awk 'FNR==NR{a[FNR]=[=10=];next} {a[FNR]=(a[FNR]?a[FNR] ORS:"")[=10=]} END{for(i=1;i<=FNR;i++){print a[i]}}' Input_file1 Input_file2
编辑: 添加 1 个更通用的解决方案,我们可以将 N 个文件传递给它而且它不假设该数字所有 Input_file(s) 中的行数相同,它从所有文件中获取最大行数并将打印匹配行(所有文件中的行号)并将打印行(数量更多最后也是任何文件),以防OP的文件有这种情况。
假设我们有 3 个名为 file1、file2 和 file3 的文件,如下所示。
cat Input_file1
1
5
4
cat Input_file2
44
65
56
cat Input_file3
1
2
3
4
5
6
下面是代码。
awk '
prev!=FILENAME{
count=count>prev_count?count:prev_count
}
{
prev_count=FNR
}
FNR==1{
prev=FILENAME
}
FNR==NR{
a[FNR]=[=12=]
next
}
{
a[FNR]=(a[FNR]?a[FNR] ORS:"")[=12=]
}
END{
count=count>prev_count?count:prev_count
for(i=1;i<=count;i++){
print a[i]
}
}' Input_file1 Input_file2 Input_file3
输出如下。
1
44
1
5
65
2
4
56
3
4
5
6