使用awk打印$ 0时如何保留字段分隔符

Dam*_*ien 16 awk

我尝试修改文件的一列,然后打印结果。

awk -F"|" '{ if(NR!=1){$5 = $5+0.1} print $0}' myfile
Run Code Online (Sandbox Code Playgroud)

它做我想要的,但是在打印时,只有第一行保留其字段分隔符。(那个,我不修改)。

所以我可以使用,print $1"|"$2"|"$3"|"$4"|"$5"|"...但没有使用 $0 的解决方案吗?(例如,如果我不知道列数)

我相信,我可以用 轻松解决我的问题sed,但我awk现在尝试学习。

Wil*_*ard 18

@Sukminder 已经给出了简单的答案;我有一些关于您的示例代码的风格要点和有用的语法(如代码审查)。这开始是一个评论,但它变得越来越长。

OFS 是输出字段分隔符,如前所述。

$0是 - 的默认参数,print无需明确指定。另一个风格点:awk具有所谓的“模式”,就像内置的条件块。所以你也可以只使用:

awk -F'|' 'BEGIN {OFS = FS} NR != 1 {$5 += 0.1} {print}' myfile
Run Code Online (Sandbox Code Playgroud)

  • 对于真条件的默认操作是 `print`,因此 `{print}` 通常被压缩为 `1`。 (2认同)

Run*_*ium 16

您可以设置输出字段分隔符, OFS

'BEGIN { OFS = "|" } ...'
Run Code Online (Sandbox Code Playgroud)

或者:

'BEGIN { OFS = FS } ...'
Run Code Online (Sandbox Code Playgroud)

默认为<space>