【发布时间】:2020-05-18 17:01:04
【问题描述】:
我有一个按预期工作的单行 (g)awk 脚本:
'/pattern/ {$n="new string"}1'
现在,我想在一个独立的 (g)awk 脚本中包含上述内容以及其他命令,但到目前为止我无法理解如何使其工作。
我的文件开头为:
BEGIN {
FS = ","
OFS = FS
}
{
here goes my code
}
鉴于代码的语法略有不同,我特别不确定将 /pattern/(括号内还是括号外)放在哪里 - 但也许这是我弄错的地方。
我对“1”的位置也有同样的疑问。
所以我正在更新这个,因为我不确定以上是否足够清楚 - 我的错。
我拥有的是一个包含 4 个字段 (1-4) 的 CSV 文件,我想匹配字段 #3 中的特定模式,并且在匹配该模式时,将所有该字段内容替换为新字符串。
在 (g)awk 一个班轮中,我可以做到这一点,方法如下:
awk -F, -v OFS="," '/pattern/ {$3="new string"}1
我想将上面的代码移动到一个 awk 脚本中,其他命令将出现在该脚本中,以便达到相同的结果 - 即:
输入文件:
yellow, yellow and blue, yellow and red, blue
blue, yellow and blue, yellow and red, red
red, yellow and red, blue and red, blue
red, yellow and blue, yellow and blue, red
图案:红色 感兴趣的领域:#3 新字符串:树
想要的输出:
yellow, yellow and blue, tree, blue
blue, yellow and blue, tree, red
red, yellow and red, tree, blue
red, yellow and blue, yellow and blue, red
【问题讨论】:
-
title 有点误导,因为没有与 oneline 对应的脚本。我可以建议尝试并以更好的标题回来吗?
-
应该是这样的
awk -v n=6 'BEGIN{FS=OFS=","}/pattern/{$n="new string"}1' file -
另一个问题:
$n表示以n中包含的值作为名称的变量的值。由于未定义n,因此其值为0,因此在这种情况下$n表示$0。这是表示$0的一种相当神秘的方式。当我写这篇文章时,kvantour 通过将 n 设置为某个值来纠正这个问题。
标签: awk