用awk替换UNIX列

用awk替换UNIX列,unix,awk,replace,Unix,Awk,Replace,我想用用户提供的id替换spcific列中的数据,并使用用户再次提供的值。因此,用户给出了行、列的id以及要在列中替换的值 我有以下代码: awk -v antik1=$1 -v antik2=$2 '{sub(/antik1/,"$antik2") ; print }' persons.dat.txt 但是当我这样运行它的时候 ./tool.sh Yang POUTSES 它什么也不给 persons.dat.txt: 933|Mahinda|Perera|male|1989-12-03|

我想用用户提供的id替换spcific列中的数据,并使用用户再次提供的值。因此,用户给出了行、列的id以及要在列中替换的值

我有以下代码:

awk -v antik1=$1 -v antik2=$2 '{sub(/antik1/,"$antik2") ; print }'
persons.dat.txt
但是当我这样运行它的时候

./tool.sh Yang POUTSES
它什么也不给

persons.dat.txt:

933|Mahinda|Perera|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox
1129|Carmen|Lepland|female|1984-02-18|2010-02-28T04:39:58.781+0000|81.25.252.111|Internet Explorer
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer
8698|Chen|Liu|female|1982-05-29|2010-02-21T08:44:41.479+0000|14.103.81.196|Firefox

您的代码根本不符合您的要求:

用户提供行、列的id和要替换的值

我会用它来解释

awk -v row=2 -v col=3 -v new_value="Hello World" '
    BEGIN { FS = OFS = "|" }
    NR == row {$col = new_value}
    {print}
' persons.dat.txt
注意此处变量的使用:

未加修饰的变量类似于C,用变量的值替换为行变量的用法 $symbol类似于一个运算符,它引用由此处的值$col给定的字段号的值
你会有一个更好的结果,如果你提供一个例子这是程序。。。我将从persons.dat.txt添加一些文本。为了破译awk语句,persons.data.txt中肯定需要一两行。在调用awk之前,如何将$1和$2设置为它们的值?输入文件中不存在1。2您的输入文件名与awk命令的“关闭”不在同一行。3您的子命令是错误的方法。4您的sub命令使用了错误的语法。发布有意义的示例输入和预期输出wrt您的awk命令的参数,并解释您真正想要做什么,以便我们可以帮助您。