我想将输入的每一行括在方括号中。我可以添加开头的方括号。但不是结局。结尾的“]”转到下一行并剪切该行。
例如 - 这是我的脚本 -
cat file.csv | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'
运算是 - ]ABC,[CD,EF
谢谢
我想将输入的每一行括在方括号中。我可以添加开头的方括号。但不是结局。结尾的“]”转到下一行并剪切该行。
例如 - 这是我的脚本 -
cat file.csv | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'
运算是 - ]ABC,[CD,EF
谢谢
看起来这可能是一个行尾问题,因为您的行以CR/LF
(回车和换行)而不是单独终止LF
。实际输出的是:
ABC,[CD,EF<CR>]
并且在输出最后一个字符CR
之前强制光标回到行首。]
您可以通过以下方式看到类似的效果:
pax> awk -v x='abcdef^M' 'END {print "123 ["x"]"}' </dev/null
]23 [abcdef
其中 the^M
实际上是一个CR
字符,用 ,CTRL-V
输入CTRL-M
。
至于如何修复它,您可以修复文件本身以摆脱狡猾的行尾,或者您可以gsub
在行的最后一个字段上使用类似的东西来摆脱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 |
这里完全没有必要这样做,因为awk
它本身完全能够处理文件名。我自己,如果可能的话,我宁愿修复文件。
有多种方法可以修复所述文件(取决于您可以使用哪些工具),请参阅这个出色的答案。