我想将输入的每一行括在方括号中。我可以添加开始的方括号。但不是结局。结尾“]”进入下一行并剪切该行。
e.g。 - 这是我的剧本 -
cat file.csv | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'
操作是 - ] ABC,[CD,EF
由于
答案 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-V
,CTRL-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)