我正在尝试动态重写文件,如下所示:
10.213.20.173, mem_chld, p3b-aggr-103, c3.xlarge, db, mysql
#10.213.20.191, mem_leaf, p3b-leaf-101, r3.xlarge, db, mysql
10.213.20.192, mem_leaf, p3b-leaf-102, r3.xlarge, db, mysql
10.213.20.190, mem_leaf, p3b-leaf-103, r3.xlarge, db, mysql
.....
Run Code Online (Sandbox Code Playgroud)
从最初的,分离归档到:分离的归档.所以,我用过这个:
awk -F', ' 'BEGIN{OFS=":";} { $1=$1; print }'
Run Code Online (Sandbox Code Playgroud)
这几乎是有效的,但该文件也有一些空白和注释掉的行,我也想排除.我的尝试:
awk -F', ' '!/^(#|$)/ {OFS=":";} { $1=$1; print }'
Run Code Online (Sandbox Code Playgroud)
没有像我预期的那样工作.我怎样才能做到这一点?最好!
使用awk:
$ awk -F', ' 'BEGIN{OFS=":"} !/^#/ && NF{$1=$1; print}' file
10.213.20.173:mem_chld:p3b-aggr-103:c3.xlarge:db:mysql
10.213.20.192:mem_leaf:p3b-leaf-102:r3.xlarge:db:mysql
10.213.20.190:mem_leaf:p3b-leaf-103:r3.xlarge:db:mysql
Run Code Online (Sandbox Code Playgroud)
或者你可以这样设置OFS:
awk -F', ' -v OFS=':' '!/^#/ && NF{$1=$1; print}' file
Run Code Online (Sandbox Code Playgroud)
甚至
awk -F', ' '!/^#/ && NF{$1=$1; print}' OFS=':' file
Run Code Online (Sandbox Code Playgroud)
正如Ed Morton在评论中所建议的那样,对于一个边缘情况,你可能有空间,#最好使用以下内容:
awk -F', ' 'BEGIN{OFS=":"} !/^[[:space:]]*#/ && NF{$1=$1; print}' file
Run Code Online (Sandbox Code Playgroud)
说明:
$1=$1重建$0变量.它接受所有字段并将它们连接起来,OFS我们将其设置为:而不是默认的空格.