Unix AWK脚本用文件2中的相同记录替换文件1中的记录

Unix AWK脚本用文件2中的相同记录替换文件1中的记录,unix,awk,Unix,Awk,我试图解析file2的记录23,并用它替换file1的记录23 这是我每次都要运行的命令 script.awk file1 file2 下面是两个文件的记录23的示例。每个值中的分隔符和位数相同,并且具有相同的第一个字段字符串 currentmax: 1.7229 1.6888 1.1069 1.6238 这将是更大的awk脚本的第一部分。我将在这个脚本中添加更多内容,以便只处理file1中的新值并输出到file3,但这将用于以后 我不确定命令中不同的文件顺序是否会使脚本更容易编写,然后操

我试图解析file2的记录23,并用它替换file1的记录23

这是我每次都要运行的命令

script.awk file1 file2
下面是两个文件的记录23的示例。每个值中的分隔符和位数相同,并且具有相同的第一个字段字符串

currentmax: 1.7229 1.6888 1.1069 1.6238 
这将是更大的awk脚本的第一部分。我将在这个脚本中添加更多内容,以便只处理file1中的新值并输出到file3,但这将用于以后

我不确定命令中不同的文件顺序是否会使脚本更容易编写,然后操作file1直到输出到file3。切换文件1和文件2可能会起作用

script.awk file2 file1

我会在另一个命令中这样做。它应该像例子一样简单

{ sed -e '23,$d' file1; sed -n -e '23p' file2; sed -e '1,23d' file1; } > newfile
mv newfile file1

我会在另一个命令中这样做。它应该像例子一样简单

{ sed -e '23,$d' file1; sed -n -e '23p' file2; sed -e '1,23d' file1; } > newfile
mv newfile file1

您需要首先指定file2,因为它包含您想要捕获的数据

awk有两个内置变量可以帮助您
FNR
是正在处理的当前文件的记录编号
NR
是迄今为止看到的所有行的记录编号

要从文件2捕获记录23并替换文件1的记录23:

awk '
  NR == FNR {
    # this block is processing the first file
    if (FNR == 23) line = $0
    next
  }
  FNR == 23 {$0 = line}
  {print}
' file2 file1 > file3

您需要首先指定file2,因为它包含您想要捕获的数据

awk有两个内置变量可以帮助您
FNR
是正在处理的当前文件的记录编号
NR
是迄今为止看到的所有行的记录编号

要从文件2捕获记录23并替换文件1的记录23:

awk '
  NR == FNR {
    # this block is processing the first file
    if (FNR == 23) line = $0
    next
  }
  FNR == 23 {$0 = line}
  {print}
' file2 file1 > file3

这可能适合您:

l=23; a=c # l=line number a=c to change, a=i to insert or a=a to append
sed "$l"'s/.*/'"$l$a"' &/p;d' file2 | sed -i -f - file1

这可能适合您:

l=23; a=c # l=line number a=c to change, a=i to insert or a=a to append
sed "$l"'s/.*/'"$l$a"' &/p;d' file2 | sed -i -f - file1

也许只是我,但你能详细说明一下吗?比如给我们看一些关于file1和file2的内容,然后你们会看到最终的结果。可能只是我,但你们能详细说明一下吗?比如给我们看一些关于file1和file2的内容,然后你就可以得到最终结果了。我有一个离题的问题。如何处理一个文件,其中我们要索引一个具有相同值但其他列值不同的列-例如
col1 col2 col3\n a 33 45\n B 30 00\n a 43 99
其中col1是我需要索引的列,\n标记不同的记录。@Jaypal,我不明白--我看不出有问题。你会在实际问题上得到更好的帮助,而不是评论。我有一个离题的问题。如何处理一个文件,其中我们要索引一个具有相同值但其他列值不同的列-例如
col1 col2 col3\n a 33 45\n B 30 00\n a 43 99
其中col1是我需要索引的列,\n标记不同的记录。@Jaypal,我不明白--我看不出有问题。你会在实际问题上得到更好的帮助,而不是评论。