unix 使用AWK将数据从一个文件追加到另一个文件

qyzbxkaa  于 2022-11-04  发布在  Unix
关注(0)|答案(3)|浏览(323)

我有一个已经存在的脚本来检查2个文件之间的独占数据,并将其加载到第3个文件中。命令如下。

var='FNR == NR {keys[$1 $2]; next} !($1 $2 in keys)'
awk -F\| $var file1.dat file2.dat > file3.dat

要求是重复使用相同的命令,但只是将数据从file 2附加到file 3,忽略file 1。我尝试执行以下操作,但它同时从file 1和file 2假脱机数据。我所需要的是,尽管awk命令中提供了两个文件名,但只需要附加第二个文件数据。

var='{print $0}'
awk -F\| $var file1.dat file2.dat > file3.dat

任何人都可以帮助准确的命令。下面是每个文件中的数据和预期的输出。
File 1(可以有0个或更多)-我们根本不应查看此文件

123
456
789

档案2:

123
ABC
XYZ
456

File 3中的预期输出(全部来自file 2,仅忽略file 1输入,但我必须在awk命令中具有file 1名称)

123
ABC
XYZ
456
khbbv19g

khbbv19g1#

所有这些都来自file2,只需忽略file1输入,但我必须在awk命令中使用file1名称。
如果您必须在awk命令的参数中使用file1file2,并且只想从file2输出内容,则可以用途:

awk 'BEGIN {delete ARGV[1]} 1' file1 file2 > file3

123
ABC
XYZ
456

delete ARGV[1]将删除参数列表中第一个参数

b4lqfgs4

b4lqfgs42#

使用您展示的示例和尝试,请尝试以下awk代码。在GNU awk中编写和测试。只需使用nextfile跳过名为file1的第一个Input_file,并读取前面的第二个文件。

awk 'NR==1{nextfile} 1' file1 file2
ztmd8pv5

ztmd8pv53#

我还要记住不要浪费时间拆分不需要的字段

{m,g}awk 'BEGIN { delete ARGV[_^=FS="^$"] }_' file1 file2

如果不一次阅读一行,速度会快很多:
第一个
并尽量避免使用gawk的慢速默认模式:
一个

相关问题