Pau*_*aul 2 awk field separator output
我有一个文件
A|B|C|D|E|F
Run Code Online (Sandbox Code Playgroud)
我需要像这样的输出
"A","B","C","D","E","F"
Run Code Online (Sandbox Code Playgroud)
我做了:
awk -f'|' '{print $1,$2,$3}'
Run Code Online (Sandbox Code Playgroud)
这给了我只有空格的输出。我的问题是如何使用引号获取逗号分隔的输出,以及如何在不输入的情况下一次打印所有值'{print $1,$2,$3......}'
我可以:
awk -f'|' '{print """"$1""""","""""$2""""","""""$3""""..}'
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
要指定字段分隔符,您必须使用;-F来代替 -f要更改输出的字段分隔符,您必须更改变量OFS(输出字段分隔符)。
字段周围的引号,您可以循环所有字段并添加它们:
$ awk -F"|" -v OFS="," '{for (i=1; i<=NF; ++i){$i="\""$i"\""}}1' infile
"A","B","C","D","E","F"
Run Code Online (Sandbox Code Playgroud)
或者,使用 sed:
$ sed 's/\([^|]*\)/"\1"/g;y/|/,/' infile
"A","B","C","D","E","F"
Run Code Online (Sandbox Code Playgroud)
这用引号将所有非管道字符序列括起来,然后用逗号替换所有管道。
惯用的 awk 解决方案是告诉 awk 输入字段分隔符 (FS) 是什么以及您希望输出字段分隔符 (OFS) 是什么,然后简单地更新一个字段,以便 awk 将所有 FS 转换为 OFS。
所以可能是这样的:
$ awk -F'|' -v OFS='","' '{$1=$1; print "\"" $0 "\""}' file
"A","B","C","D","E","F"
Run Code Online (Sandbox Code Playgroud)
或这个:
$ awk -F'|' -v OFS='","' '{$1=$1; gsub(/^|$/,"\"")} 1' file
"A","B","C","D","E","F"
Run Code Online (Sandbox Code Playgroud)
或@karakfa的替代方案/sf/answers/2492515301/或各种其他类似的解决方案。
| 归档时间: |
|
| 查看次数: |
4186 次 |
| 最近记录: |