我有一个管道分隔的文件,如下所示:
123| ste hen| 456| out put
143 | ste hen| 456| out put
我想删除空格--类似于这个
123,ste hen,456,out put
143,ste hen,456,out put
这是我的代码,但不起作用。。
awk '{gsub(/^ +| +$/,"|"); gsub(/ *, */,"|")}1' test2.txt
我会按照以下方式使用GNUAWK
,让file.txt
的内容是
123| ste hen| 456| out put
143 | ste hen| 456| out put
然后
awk '{gsub(/ *| */,",");print}' file.txt
输出
123,ste hen,456,out put
143,ste hen,456,out put
与{gsub(/^ +| +$/,"|"); gsub(/ *, */,"|")}1
相比所做的更改
- 消除
^
,即开始 - 消除
$
即结束 - 转义
|
,因为您需要文字|
而不是替代 - 在每个
|
周围寻找零个或多个(*
(空间,而不是在每一侧寻找至少1个空间 - 将两个
gsub
替换为一个 - 通过
print
而不是1
触发打印(风格问题,请参阅您所在组织的风格指南,以使用适合您情况的解决方案(
(在第4.2.1项中测试(
我的第一个快速方法是下一个:
cat testFile.txt | sed 's/|/,/g' | sed 's/s*,s*/,/g''
过去的命令显示以下结果:
123,ste hen,456,out put
143,ste hen,456,out put
来自以下输入:
123| ste hen| 456| out put
143 | ste hen| 456| out put
sed
解决方案:
sed 's/^ *//; s/ *$//; s/ *| */,/g' file
awk'{gsub(/*|*/,"|";print}'test2.txt