awk代码块或函数中的NF允许做什么?

库萨兰达

参考:实用程序的POSIX标准awk

我真正想念的一件事awk是能够使用定界符将数组连接起来,就像使用joinPerl中命令一样,通常是为立即输出而完成的。

相反,我最终写了像

for (key in array)
    joined_string = (joined_string ==  "" ? array[key] : joined_string "," array[key])

print joined_string

或者

joined_string = array[1]
for (i = 2; i <= length(array); ++i)
    joined_string = joined_string "," array[i];

print joined_string

但是,awk如果我更改当前字段可以为我这样做:

OFS="," # (would probably do this in BEGIN)

n = 0
for (key in array)
    $(++n) = array[key]

print

我相信这是完全合法的。但是,如果当前输入记录的字段数多于array数组具有条目的数,则这将在输出中产生垃圾(“垃圾”将是来自输入文件的数据)。因此,很高兴能够做到

OFS = "," # (would probably do this in BEGIN)

n = 0
for (key in array)
    $(++n) = array[key]

NF = n
print

我在标准中找不到NF允许修改的文字,但也没有任何文字表明不允许修改或调用未定义的行为。找到的信息就是getline 那套NF这并不是说不允许我编写自己的函数或代码块来重设代码NF,而是在存在getline“函数”的情况下优先执行此操作

还声明允许分配给,$0并且此操作将重置NF这是否意味着以下代码会更好?

OFS = "," # (would probably do this in BEGIN)

$0 = ""
n = 0
for (key in array)
    $(++n) = array[key]

print

双重问题:

  1. 可以设定NF吗?
  2. 最后一段代码是将数组与定界符连接以输出的正确方法吗?
斯蒂芬·基特

据我所知,尚无标准文本记录set的副作用NF,甚至是否允许设置。Gawk手册(也作为有效awk编程出版)说,它尝试一般性地记录Awk,而不是(仅)记录GNU实现,包括以下内容

递减NF会丢弃的值,NF然后重新计算并重新计算$0(直流)

告诫

注意:某些版本的递减awk不会重建$0NF

“(dc)”的意思是这是Awk“黑暗角落”,记载不充分(或根本没有记载)并且行为因一种实现而异的行为。

POSIX将特殊变量定义为

awk设置的变量

但并未指定程序是否可以设置它们(作为一般规则)。某些变量的说明确实提到可以对其进行修改(请参阅ARGCARGV),另一些变量的更改后果则是由实现定义的(ENVIRON),还有一些则未提及,只是“明显地”打算由变量进行修改。程序(OFS等)。

NF的情况下,实验给出了部分答案:

  • 修改NF工作如GNU Awk中所述,并且mawk也具有相同的行为;
  • 变化NF的一个真实的awk中被保留,但不会导致$0重新计算。

所以我会说

  1. NF允许设置,但除了设置该值外可能没有任何副作用。
  2. 由于设置$0 由POSIX指定的,因此根据规格,最后一个变体是正确的。(这是值得商榷无论是正确的方法,因为它失去了$0。)

在功能方面怎样把数组在awk中的字符串?有趣,但是按照定义,它依赖于GNU Awk扩展,因此不能回答这个问题。

(其他可以设置的变量有点令人惊讶,但是在TOTA中包含NRFNRFILENAME但是不能设置,或者设置它会清除其值。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这个特定的代码块在我的函数中做什么?

来自分类Dev

在PHP中,此代码块在表单必填字段中做什么?

来自分类Dev

为什么允许使用独立代码块?

来自分类Dev

该代码块在做什么?(u> 0)-(u <0)

来自分类Dev

awk中NF的递减

来自分类Dev

lambda在此python代码中做什么?

来自分类Dev

此代码中的“ it”功能做什么?

来自分类Dev

此代码在bash中做什么?

来自分类Dev

这段代码中的“ s”是做什么的?

来自分类Dev

这段代码中的[0]在做什么?

来自分类Dev

以下代码在cpython中做什么

来自分类Dev

这行代码在C编程中做什么?

来自分类Dev

以下代码在C中做什么?

来自分类Dev

这样的返回结果如何,这段代码中的lambda函数是做什么的?

来自分类Dev

我在代码块中添加了一行代码,尽管我得到的答案是正确的,但我不明白那行代码能做什么

来自分类Dev

cls()函数在类方法中做什么?

来自分类Dev

返回的函数在指令声明中做什么

来自分类Dev

`delete`函数在NSObject中做什么

来自分类Dev

list()函数在Python中做什么?

来自分类Dev

define函数在AngularJS中做什么?

来自分类Dev

ts函数在R中做什么

来自分类Dev

冒号在javascript函数参数中做什么

来自分类Dev

返回的函数在指令声明中做什么

来自分类Dev

AWK:匹配头文件中枚举块内的代码块

来自分类Dev

Java为什么允许枚举常量的代码块?

来自分类Dev

在InputStream中,块大小是做什么的?(声音设备)

来自分类Dev

C#中的函数式编程:如何使用语句嵌套并允许代码块修改返回的数据?

来自分类Dev

AWK 模式代码块语法:如何在 AWK 中按模式运行代码块?

来自分类Dev

在代码块中组合可管道函数

Related 相关文章

热门标签

归档