Shell 在linux中合并两个不相等的文件

Shell 在linux中合并两个不相等的文件,shell,unix,awk,terminal,paste,Shell,Unix,Awk,Terminal,Paste,我需要合并2个文件到一个2列,它必须在终端(linux)完成。我在谷歌上搜索了很多,找到了“粘贴”的解决方案 粘贴f1 f2>f3 但结果是错误的,以下是文件: f1 f2 只是文件头f1有300000条记录,f2有1M条记录。我也知道“awk”可以用来做这件事。我想用“awk”来完成它试试这个- #awk 'BEGIN{FS=","} NR==FNR{a[NR]=$1FS$2;next} {print $0,a[$1]}' f2 f1 1,2.46 1000001,1.77

我需要合并2个文件到一个2列,它必须在终端(linux)完成。我在谷歌上搜索了很多,找到了“粘贴”的解决方案

粘贴f1 f2>f3

但结果是错误的,以下是文件:

f1

f2


只是文件头f1有300000条记录,f2有1M条记录。我也知道“awk”可以用来做这件事。我想用“awk”来完成它

试试这个-

    #awk 'BEGIN{FS=","} NR==FNR{a[NR]=$1FS$2;next} {print $0,a[$1]}' f2 f1
    1,2.46 1000001,1.77
    2,5.67 1000002,3.75
    3,2.53 1000003,1.38
    4,1.07 1000004,4.67
    5,4.24 1000005,3.42
    6,18.11 1000006,2.97
    7,8.02 1000007,9.24
    8,7.25 1000008,4.16
    9,4.49 1000009,1.75
    10,2.72 1000010,5.72

@索曼:基于这样的假设(你想同时打印f1和f2的所有行(第一行是f1,第二行是f2,打印时会有一个选项卡),那么文件f2中的任何额外行都应该一次性打印

awk 'FNR==NR{A[FNR]=$0;next} A[FNR]{print A[FNR] ORS "\t" $0;} !A[FNR]{B[++i]=$0} END{for(j=1;j<=i;j++){print "\t" B[j]}}' f1  f2

awk'FNR==NR{A[FNR]=$0;next}A[FNR]{print A[FNR]or“\t”$0;}!A[FNR]{B[++i]=$0}END{for(j=1;j您的文件包含control-Ms。请在您的输入文件上运行
dos2unix
或类似操作,然后再次尝试
paste
。如果您仍然有问题,请回答您的问题以显示预期的输出-到目前为止,您刚刚向我们显示了一种您不想要的输出格式。我将对我的文件使用awk,但“dos2unix”解决的问题输出是正确的。虽然这是我的假设,但我认为OP也需要那些在文件f1中匹配行数之后的行。
1,2.46
    1000001,1.77
2,5.67
    1000002,3.75
3,2.53
    1000003,1.38
4,1.07
    1000004,4.67
5,4.24
    1000005,3.42
6,18.11
    1000006,2.97
7,8.02
    1000007,9.24
8,7.25
    1000008,4.16
9,4.49
    1000009,1.75
10,2.72
    1000010,5.72
    1000011,2.18
    1000012,2.14
    1000013,2.51
    1000014,1.60
    1000015,2.85
    #awk 'BEGIN{FS=","} NR==FNR{a[NR]=$1FS$2;next} {print $0,a[$1]}' f2 f1
    1,2.46 1000001,1.77
    2,5.67 1000002,3.75
    3,2.53 1000003,1.38
    4,1.07 1000004,4.67
    5,4.24 1000005,3.42
    6,18.11 1000006,2.97
    7,8.02 1000007,9.24
    8,7.25 1000008,4.16
    9,4.49 1000009,1.75
    10,2.72 1000010,5.72
awk 'FNR==NR{A[FNR]=$0;next} A[FNR]{print A[FNR] ORS "\t" $0;} !A[FNR]{B[++i]=$0} END{for(j=1;j<=i;j++){print "\t" B[j]}}' f1  f2