[英]Append data from 1 file to another using AWK
我有一个已经存在的脚本来检查 2 个文件之间的专有数据并将其加载到第 3 个文件中。 命令如下。
var='FNR == NR {keys[$1 $2]; next} !($1 $2 in keys)'
awk -F\| $var file1.dat file2.dat > file3.dat
要求是重用相同但只是 append 的数据从文件 2 到文件 3 忽略文件 1。 我尝试执行以下操作,但它正在后台处理来自 file1 和 file2 的数据。 我所需要的只是,虽然 awk 命令中提供了 2 个文件名,但只附加了第二个文件数据。
var='{print $0}'
awk -F\| $var file1.dat file2.dat > file3.dat
任何人都可以帮助确切的命令。 以下是每个文件中的数据和预期的 output。
File1 (可以有 0 个或更多) - 我们根本不应该看这个文件
123
456
789
文件2:
123
ABC
XYZ
456
File3 中的预期 output (全部来自 file2,只是忽略 file1 输入,但我必须在 awk 命令中有 file1 名称)
123
ABC
XYZ
456
全部来自
file2
并忽略file1
输入,但我必须在 awk 命令中有 file1 名称。
如果您必须在 arguments 到 awk 命令中使用file1
和file2
并且只想使用来自file2
的 output 内容,那么您可以使用:
awk 'BEGIN {delete ARGV[1]} 1' file1 file2 > file3
123
ABC
XYZ
456
delete ARGV[1]
将从参数列表中删除第一个参数。
使用您显示的示例和尝试,请尝试遵循awk
代码。 在 GNU awk
中编写和测试。 只需使用nextfile
跳过名为 file1 的第一个 Input_file 并继续读取第二个文件。
awk 'NR==1{nextfile} 1' file1 file2
还记得不要浪费时间拆分不需要的字段
{m,g}awk 'BEGIN { delete ARGV[_^=FS="^$"] }_' file1 file2
而且一次不读一行会更快:
mawk2 'BEGIN { delete ARGV[_^=FS="^$"] }_' "${m2p}" "${m3t}"
out9: 1.85GiB 0:00:01 [1.11GiB/s] [1.11GiB/s] [ <=>]
f9d2e18d22eb58e5fc2173863cff238e stdin
mawk2 'BEGIN { delete ARGV[_^=RS=FS="^$"] }_^(ORS=__)' "${m2p}" "${m3t}"
out9: 1.85GiB 0:00:00 [1.92GiB/s] [1.92GiB/s] [<=> ]
f9d2e18d22eb58e5fc2173863cff238e stdin
并尽量避免gawk
的慢速默认模式:
gawk 'BEGIN { delete ARGV[_^=FS="^$"] }_' "${m2p}" "${m3t}"
out9: 1.85GiB 0:00:03 [ 620MiB/s] [ 620MiB/s] [ <=> ]
f9d2e18d22eb58e5fc2173863cff238e stdin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.