如何在awk中添加结束方括号

时间:2013-09-16 09:06:20

标签: awk

我想将输入的每一行括在方括号中。我可以添加开始的方括号。但不是结局。结尾“]”进入下一行并剪切该行。

e.g。 - 这是我的剧本 -

cat file.csv | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'

操作是 - ] ABC,[CD,EF

由于

2 个答案:

答案 0 :(得分:3)

看起来这可能是一个行结束问题,因为你的行以CR/LF(回车和换行符)终止而不仅仅是LF实际输出的是:

ABC,[CD,EF<CR>]

并且CR在输出最终]字符之前强制光标返回到行的开头。

你可以看到类似的效果:

pax> awk -v x='abcdef^M' 'END {print "123 ["x"]"}' </dev/null
]23 [abcdef

其中^M实际上是CR个字符,输入CTRL-VCTRL-M

至于如何解决它,您可以修复文件本身以摆脱狡猾的行结尾,或者您可以在行的最后一个字段上使用gsub之类的内容来摆脱{{ 1}}字符:

CR

在你的情况下,那将是:

pax> # this bit here ----------vvvvvvvvvvvvvvvv
pax> awk -v x='abcdef^M' 'END {gsub("^M","",x);print "123 ["x"]"}' </dev/null
123 [abcdef]

注意awk 'BEGIN {FS=","; OFS=","} {gsub("^M","",$7);print $1,"["$6,$7"]"}' file.csv 完全没必要,因为cat file.csv |完全有能力处理文件名本身。我自己,如果可能的话,我宁愿修复文件。

通过多种方式修复所述文件(取决于您可以使用的工具),请参阅this excellent answer

答案 1 :(得分:1)

您的代码使用正确的输入,例如:

$ echo {A..J} | sed 's/ /,/g' | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'
A,[F,G]

正如migthy @paxdiablo所说,可能是一个终结问题。使用file - 命令

进行检查

要转换为正确的行结尾,请使用例如fromdosdos2unix