Unix awk替换文本,但不替换最后一行

Unix awk替换文本,但不替换最后一行,unix,awk,gawk,Unix,Awk,Gawk,我尝试了下面的awk命令行程序(在windows命令提示符下):工作不正常 gawk -v var="hot" "{ if(!NR){gsub(/cool/,var,$0) ;print} else{print}}" awk_test 输入文件在下面 this is a cool jack this nota cool kack this obviously a cool jack unix解决方案也是可行的您可以尝试以下方法: sed '$d' yourfile | sed 's/

我尝试了下面的awk命令行程序(在windows命令提示符下):工作不正常

gawk -v var="hot" "{ if(!NR){gsub(/cool/,var,$0) ;print} else{print}}" awk_test
输入文件在下面

 this is a cool jack
 this nota cool kack
 this obviously a cool jack 

unix解决方案也是可行的

您可以尝试以下方法:

sed '$d' yourfile | sed 's/cool/hot/g' > newfile
tail -1 yourfile >> newfile

这应该首先对文件的最后一行以外的所有内容进行替换,然后添加原始文件的最后一行。

您可以尝试以下操作:

sed '$d' yourfile | sed 's/cool/hot/g' > newfile
tail -1 yourfile >> newfile
awk -vvar="hot" '{gsub("cool",hot,t);print t}{t=$0}END{print}' file

这应该首先对文件的最后一行以外的所有行进行替换,然后添加原始文件的最后一行。

您也可以将行数作为参数传递:

awk -vvar="hot" '{gsub("cool",hot,t);print t}{t=$0}END{print}' file
gawk -v var=hot -v lines=$(wc -l < test.txt) '
    NR != lines {gsub(/cool/, var)} 
    {print}
' test.txt
gawk-v var=hot-v lines=$(wc-l
您还可以将行数作为参数传递:

gawk -v var=hot -v lines=$(wc -l < test.txt) '
    NR != lines {gsub(/cool/, var)} 
    {print}
' test.txt
gawk-v var=hot-v lines=$(wc-l
这没问题……但是我的命令提示符中没有sed。我只有gawk。所以我需要一个awk/gawk解决方案。我的gawk脚本到底出了什么问题。这没问题……但是我的命令提示符中没有sed。我只有gawk。所以我需要一个awk/gawk解决方案。我的gawk脚本的实际错误是什么。条件
(!NR)
始终为false,因为NR(当前记录编号)始终为正整数。条件
(!NR)
始终为false,因为NR(当前记录编号)始终为正整数。