更改第一行的输出字段分隔符

Nin*_*den 1 awk

我有一个这样的文件

name|age
Bob|30
Tom|50
Cindy|10
Run Code Online (Sandbox Code Playgroud)

我希望第一行有一个不同的分隔符“^”。

name|age
Bob|30
Tom|50
Cindy|10
Run Code Online (Sandbox Code Playgroud)

但我不断得到

^n^a^m^e^|^a^g^e^
Bob|30
Tom|50
Cindy|10
Run Code Online (Sandbox Code Playgroud)

期望的输出是

name^age
Bob|30
Tom|50
Cindy|10
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您的代码gsub("|","^")没有|转义的特殊元字符(用于正则表达式中的交替),因此它将匹配输入中的每个位置。

您可以在awk不涉及任何正则表达式的情况下使用它:

awk 'BEGIN{FS=OFS="|"} FNR==1{OFS="^"; $1=$1; OFS=FS} 1' f
Run Code Online (Sandbox Code Playgroud)

name^age
Bob|30
Tom|50
Cindy|10
Run Code Online (Sandbox Code Playgroud)

细节:

  • FS="|": 设置FS|
  • OFS="^": 设置OFS^
  • $1=$1强制 awk使用重新格式化每个字段OFS