我有如下文本行:
P, 123456 ,01,A,H, 123456 ,123456 123456 ,,
P,123456 ,01,A,H, 123456, 123456 123456,,
P, 123456,01,A,H,123456 ,123456 123456 ,,
P, 123456,01,A,H, 123456, 123456 123456,,
P,123456 ,01,A,H,123456 ,123456 123456 ,,
Run Code Online (Sandbox Code Playgroud)
我希望它们如下所示:
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
Run Code Online (Sandbox Code Playgroud)
要求:
研究:
我尝试了许多与awk, 的组合sed,tr但无法根据我的要求成功。我想在awk, 中有一个更好的解决方案sed,tr只是因为我所有的客户都安装了有限的 CYGWIN。所以我不能要求我所有的客户安装新的可执行文件。
你可以使用这个awk:
awk -F' *, *' '$1=$1' OFS=, file
Run Code Online (Sandbox Code Playgroud)
可以理解的方式:
awk 'BEGIN{FS=" *, *"; OFS=","} $1=$1' file
Run Code Online (Sandbox Code Playgroud)
正如@glennjackman 所评论的,使用更安全
awk 'BEGIN{FS=" *, *"; OFS=","} {$1=$1; print}' file
Run Code Online (Sandbox Code Playgroud)
解释:
FS - 设置输入字段分隔符OFS - 设置输出字段分隔符$1=$1- 这将awk使用OFS. 这将返回true这使得awk打印当前行(格式化)。