AWK脚本用file2中的相同记录替换file1中的记录

时间:2012-01-31 15:58:25

标签: unix awk

我正在尝试解析file2 for record 23并使用它来替换file1的记录23。

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

script.awk file1 file2

以下是两个文件的记录23的示例。相同的分隔符和每个值中的位数以及具有相同的第一个字段串。

currentmax: 1.7229 1.6888 1.1069 1.6238 

这将是更大的awk脚本的第一部分。我会在这个脚本中添加更多内容,只使用file1中的新值并输出到file3,但这样可以用于以后。

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

script.awk file2 file1

3 个答案:

答案 0 :(得分:5)

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

awk有几个内置变量可以帮助你。 FNR是正在处理的当前文件的记录号。 NR是到目前为止看到的所有行的记录数。

从file2捕获记录23并替换file1的记录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

答案 1 :(得分:0)

我会在一个单独的命令中这样做。它应该像例如

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

答案 2 :(得分:0)

这可能对您有用:

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