输入文件:
abc | hello |123 |
def | hi ram | 456 |
输出文件应如下
abc|hello|123|
def|hi ram|456
如果我们可以使用awk或sed命令实现此目的,请告诉我。我想使用系统命令
在perl中执行相同的操作答案 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.