使用unix命令修剪由分隔符分隔的文件字段中的尾随和前导空格

时间:2014-06-18 17:12:03

标签: perl unix awk sed

输入文件:

abc  | hello |123 |

def  | hi ram | 456 |

输出文件应如下

abc|hello|123|

def|hi ram|456

如果我们可以使用awk或sed命令实现此目的,请告诉我。我想使用系统命令

在perl中执行相同的操作

3 个答案:

答案 0 :(得分:1)

perl -lpe 's/ \s*[|]\s* /|/xg' file

输出

abc|hello|123|
def|hi ram|456|

答案 1 :(得分:0)

使用Perl one-liner

perl -i -lne 'print join "|", map {s/^\s+|\s+$//g; $_} split /\|/, $_, -1' data.txt

说明:

切换

  • -i:修改<>文件到位(如果提供扩展,则进行备份)
  • -l:启用行结束处理
  • -n:为输入文件中的每一行创建一个while(<>){...}循环。
  • -e:告诉perl在命令行上执行代码。

答案 2 :(得分:0)

尝试使用以下awk命令删除由|符号分隔的列中的所有前导和尾随空格,

$ awk -F'|' '/^ *$/{next;} {gsub (/ *$/,"",$1); gsub (/^ */,"",$2); gsub (/^ */,"",$3); gsub (/ *$/,"",$2); gsub (/^ */,"",$3); gsub (/ *$/,"",$3); print $1"|"$2"|"$3"|"}' imp
abc|hello|123|
def|hi ram|456|

<强>解释

-F'|'                  # Field seperator is set to |.

/^ *$/{next;}          # Awk skips from doing the operation on seeing a blank line.

gsub (/ *$/,"",$1);    # Removes the trailing spaces on column no1.

gsub (/^ */,"",$2)     # Removes the leading spaces on column number2.

print $1"|"$2"|"$3"|"  # Prints the column1,2,3 delimited by a pipe symbol.