使用awk更改两条不同行中的值

使用awk更改两条不同行中的值,awk,Awk,我有一张固定的参数卡。我需要更改第10行和第20行的值,我正在尝试使用awk,但到目前为止没有得到它。这些位置是固定的,所以我需要做一个循环,但它总是相同的2行,第10行和第20行。我尝试过这种方法,但它将所有行中的$1从10更改为20。由于我将更改这些值,因此无法使用sed来匹配模式,因为我没有模式,因此每次的值都是随机的,只有行是固定的 awk 'FNR==10,FNR==20{$1="new_value"}1' dummycard.txt > dummynew.txt 那就是我

我有一张固定的参数卡。我需要更改第10行和第20行的值,我正在尝试使用awk,但到目前为止没有得到它。这些位置是固定的,所以我需要做一个循环,但它总是相同的2行,第10行和第20行。我尝试过这种方法,但它将所有行中的$1从10更改为20。由于我将更改这些值,因此无法使用sed来匹配模式,因为我没有模式,因此每次的值都是随机的,只有行是固定的

awk 'FNR==10,FNR==20{$1="new_value"}1' dummycard.txt > dummynew.txt  
那就是我的档案:

DATAFILE
p365.txt
TRAITS
2
FIELDS_PASSED TO OUTPUT

WEIGHT(S)

RESIDUAL_VARIANCE
300
EFFECT
3 cross numer
EFFECT
1 cross numer
RANDOM
animal
FILE
pednem.txt
(CO)VARIANCES
200
OPTION conv_crit 1d-12
Convergence criterion (default 1d-10).
OPTION maxrounds 10000
maximum rounds (default 5000).

您应该给出FNR检查的条件

awk 'FNR==10 || FNR==20{$1="new_value"}1' Input_file
或者按照教育署署长的建议,你可以尝试:

awk 'FNR ~ /^[12]0$/{$1="new_value"}1' Input_file


如果您希望在awk变量中包含新值,请尝试以下操作

awk -v new_value="10" 'FNR==10 || FNR==20{$1=new_value}1' Input_file
例如,我已将其值设置为10,您可以根据需要进行设置


OP代码不起作用的原因:由于OP在行号之间使用了
,因此它被视为一个范围,因此所有行号都从行号10更改为20。

非常感谢您的帮助。我需要建立一个脚本,基本上从一个文本文件中获取值,做一些数学运算并保存到另一个文件中,在你看来,最好还是坚持使用awk,或者我可以使用类似python的东西来代替?@PauloBarros,欢迎使用awk或python如果你的数学很复杂(而且你的项目很大),这完全取决于你的用例对于python或小型项目,awk非常好。干杯,快乐学习。你也可以使用
FNR~/^(10 | 20)$/
,这样你就不必一直键入
FNR==
,如果你有几个值要比较的话。在这种情况下,你可以将其缩写为
FNR~/^[12]0$/
,但这没关系…@EdMorton,谢谢你,先生,我在cab中,我一到桌上就会添加它:)干杯有一种方法可以不使用“temp”文件进行替换,有点像是覆盖原始文件,或者我不能,因为我正在使用它作为输入?当我执行
awk-v nvG=230'FNR==20{$1=nvG;print}1'card_p365.txt>temp awk'FNR==20{$1=$1;print}1'temp>card_p365.txt
生成的文件现在有3行相同的替换行,如
new_value new_value new_value new_value