使用bash shell命令从另一个文件的列替换文件中的值列的最佳方法?

问题描述 投票:0回答:2

我正在尝试通过从另一个值的列替换文件中的某些列值来做简单的工作,例如,我想用file2的值替换file1中的两列,比如说第二和第三。因此,预期的输出将类似于:File3

文件1:

1 2 3 4
1 2 3 4
1 2 3 4

File2:

5 6
5 6
5 6

File3:

1 5 6 4
1 5 6 4
1 5 6 4

所以我当前的解决方案是使用awk:

awk 'NR==FNR{a[NR]=$1;b[NR]=$2;next}{$2=a[FNR];$3=b[FNR]}1' File2 File1>File3

但是我觉得如果有一百万行,那可能会太慢,因为每次我必须逐行扫描文件1和文件2来恢复或调用我在awk中创建的数组时,都可能会太慢。由于File1和File2具有相似的长度,我想知道是否可以做一些事情,例如将File2的值作为变量传递并直接替换。我尝试过类似的事情:

F2_col1=`awk '{print $1}' File2`
F2_col2=`awk '{print $2}' File2`
awk -v F2_col_v1=$F2_col1 -v F2_col_v2=$F2_col2 '{$2=F2_col_v1;$3=F2_col_v2;print }'File1 >File3

但是会引发一个错误,说无法读取文件5。好像awk试图将File2的值读取为单个文件?我想知道如何正确执行?还是有其他更快的方法可以做到这一点。我只关心计算时间,因此欢迎提出任何建议(不仅限于awk)。

bash shell awk
2个回答
0
投票

您的awk变量未加引号,例如


0
投票

由于您指定了它不必严格为awk,所以我的建议是合并文件并仅打印选定的列:

© www.soinside.com 2019 - 2024. All rights reserved.