我想说我有一个输入textFile.txt,其中包含:
0.3340 0.2333 0.1029 .0349 .2302 [ blah blah ]
0.2223 0.2343 0.2394 .4395 .7943 [ blah2 blah2 ]
并且数字之间存在可变数量的空白。
我要输出:
0.334,0.2333,0.1029,.0349,.2302 [ blah blah ]
0.2223,0.2343,0.2394,.4395,.7943 [ blah2 blah2 ]
进一步处理。
awk 'BEGIN { OFS = "," }{ print $1, $2, $3, $4, $5 }' textFile.txt
如何将我想要的字段分隔符与搜索左括号相结合,并告诉它输出左括号未修改后的内容?
答案 0 :(得分:5)
根据示例输入,您希望在 more 之间用一个空格分隔的字段之间使用逗号。如果是这样的话:
$ awk -F' +' '$1=$1' OFS=, text.txt
0.3340,0.2333,0.1029,.0349,.2302 [ blah blah ]
0.2223,0.2343,0.2394,.4395,.7943 [ blah2 blah2 ]
工作原理:
-F' +'
这告诉awk将两个或多个空格视为字段分隔符。
$1=$1
这使得awk认为该行已被更改。因此,awk将使用新的字段分隔符重新格式化输出中的行。
OFS=,
这告诉awk使用逗号作为输出字段分隔符。
答案 1 :(得分:1)
GNU awk
解决方案:
awk -v FPAT='[0-9]?\\.[0-9]+|\\[[^][]+\\]' \
'{ for (i=1; i<=NF; i++) printf "%s%s", $i, (i == NF? ORS : ",") }' file
FPAT
- 内置变量;模式定义字段值输出:
0.3340,0.2333,0.1029,.0349,.2302,[ blah blah ]
0.2223,0.2343,0.2394,.4395,.7943,[ blah2 blah2 ]
答案 2 :(得分:1)
我会使用左括号(实际上是“空格+支架”) 作为字段分隔符,并替换第一个空格 字段:
gawk -F' \\[' -v OFS=' [' '{gsub(/[[:blank:]]+/,",",$1); print }'
我相信需要GNU awk。