如何用 ',' 分隔输出记录,同时避免 awk 中的尾随逗号

kor*_*rin 3 awk text-formatting

考虑以下awk语句及其输出:

$ awk -F "/" '/\/tcp/ {print $1}' input_file

10\n
20\n
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

10,20
Run Code Online (Sandbox Code Playgroud)

我尝试的是:

$ awk -F "/" 'BEGIN{ORS=","} /\/tcp/ {print $1}' input_file
10,20,
Run Code Online (Sandbox Code Playgroud)

如何去掉末尾的逗号?

Ed *_*ton 5

不要将 ORS 设置为,,因为这样你的脚本的输出不会以换行符结尾,因此它不是每个 POSIX 的有效文本文件,因此与你调用的其他脚本使用它所做的事情是一样的。相反,不要管 ORS,这样它就会保留您的平台应该具有的任何值,并在,您想要输出的每个字符串之前打印除第一个字符串之外的每个字符串:

awk -F '/' '/\/tcp/{printf "%s%s", sep, $1; sep=","} END{print ""}'
Run Code Online (Sandbox Code Playgroud)

例如:

$ seq 3 | awk '{printf "%s%s", sep, $0; sep=","} END{print ""}'
1,2,3
Run Code Online (Sandbox Code Playgroud)

  • 它与 mosvy 不太相同 - 我只是打印 ORS 在输出末尾的任何值,而他们打印硬编码的“\n”,假设这就是 ORS 在将其设置为 null 之前设置的值。当你想输出 ORS 时,`print ""` 总是比 `print "\n"` 更好。我不知道OP是否有输入文件或输入来自管道或其他东西,所以我没有添加输入文件。不过,这没什么大不了的。 (2认同)