【问题标题】:replace columns UNIX with awk用 awk 替换列 UNIX
【发布时间】:2016-07-19 03:04:44
【问题描述】:

我想用用户提供的 id 替换特定列中的数据,该值再次由用户提供。所以用户给出行、列的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

【问题讨论】:

  • 如果你提供一个例子你会有更好的结果
  • 这是程序...我会从 person.dat.txt 中添加一点文本
  • 为了破译awk语句,肯定需要persons.data.txt中的一两行
  • 在调用awk 之前如何将$1$2 设置为它们的值?
  • 1) Yang 在您的输入文件中不存在。 2)您不要在与 awk 命令的结束 ' 相同的行上提供输入文件名。 3)您的 sub() 命令是错误的方法。 4) 您的 sub() 命令使用了错误的语法。发布对您的 awk 命令参数有意义的示例输入和预期输出,并解释您真正想要做什么,以便我们为您提供帮助。

标签: unix awk replace


【解决方案1】:

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

用户给出行、列的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,用变量的值替换(“行”变量的用法
  • $ 符号就像一个运算符,它引用由值(此处为“$col”)给出的字段编号的值

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2015-01-07
    • 2017-02-14
    • 2014-04-07
    • 2014-03-27
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多