首页 > 解决方案 > 将多个字符串替换 awk 命令合并为一个

问题描述

我有两个单独的 awk 命令,它们将destination_file 的特定行的第三列替换为源文件的特定行的第三列。这些命令可以工作,但是对于大量的 IO 操作来说很麻烦。有没有办法将 awk 命令组合成一个?

我目前的命令是:

z2=$(awk 'NR==12 { print$1 }' ../source_folder/source_file)
z3=$(awk 'NR==14 { print$1 }' ../source_folder/source_file)


awk -v z2=$z2 'NR==10{$3=z2} 1' destination_file > temp && mv temp destination_file
awk -v z3=$z3 'NR==11{$3=z3} 1' destination_file > temp && mv temp destination_file

作为对这个问题的扩展,我获得 z2、z3、z4 的值的行来自 NR==12、14、16 ...,而我要替换的 destination_file 中的行是 NR==10 , 11, 12 ...; 有没有办法编写一个序列来执行此字符串替换操作,而不是列出所有 z1、z2、z3 ...?

标签: awk

解决方案


您可以将两个程序合二为一。只有 1 个awk程序来检查这两个条件NR==10NR==11并根据条件对各个字段进行相应的赋值。这会将输出保存到输出文件中。

z2=$(awk 'NR==12 { print$1 }' ../source_folder/source_file)
z3=$(awk 'NR==14 { print$1 }' ../source_folder/source_file)

awk -v z2="$z2"  -v z3="$z3" 'NR==10{$3=z2} NR==11{$3=z3} 1' destination_file > temp && mv temp destination_file

推荐阅读