如何在特定范围的列中替换分隔为空白的管道?

时间:2016-02-11 07:34:49

标签: regex linux unix awk sed

我使用awk和sed用空格替换管道,这是我的代码:

awk -F "|" -v OFS=" " ' $1=$1 '
sed "s/|/ /g" try.log

但它删除了我数据中的所有管道。这是一个示例数据:

JAP|09|7777|TECHNOLOGY|AGRICULTURE|INDUSTRY

我想要的结果是:

JAP 09 7777|TECHNOLOGY|AGRICULTURE|INDUSTRY

提前致谢。

4 个答案:

答案 0 :(得分:1)

Perl解决方案:

perl -pe '$c = 0; s/\|/ /, $c++ while $c < 2'

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed 's/|/ /;s// /' file

程序化解决方案可能是:

sed 'y/|/\n/;s/\n/|/3g;y/\n/ /' file

答案 2 :(得分:0)

试试这个内衬awk:

awk -F"|" '{a=""; for (i=1;i<=NF; i++)if(i <=3) a=a " "$i; else a=a "|"$i; sub("^[ ]","",a); print a}'

长格式:

BEGIN {
FS="|";
}
{
    a="";
    for (i=1; i<= NF; i++)
    {
        if (i <= 3)
        {
            a=a " "$i;
        }
        else
        {
            a=a "|"$i;
        }
     }
     sub("^[ ]","",a);
     print a;
}

输出:

echo "JAP|09|7777|TECHNOLOGY|AGRICULTURE|INDUSTRY" | awk -f script.awk
JAP 09 7777|TECHNOLOGY|AGRICULTURE|INDUSTRY

答案 3 :(得分:0)

awk '{sub(/\|09\|/," 09 ")}1' file 
JAP 09 7777|TECHNOLOGY|AGRICULTURE|INDUSTRY