1

我有一个这样的文件-

 1,[test1] Joe,OK
 2,[test2] Jack,OK
 3,[test3] Tom,FAIL

我正在打印这样的文件 -

cat file | awk -F"," '{ print "||"  $1 "||" $2 "||" $3 "||" }' 

我想要这样的输出文件 -

|| 1 || Joe  || OK ||
|| 2 || Jack || OK ||
|| 3 || Tom  || FAIL ||

ie[test1] Joe被修改为Joe我们如何在每一列上做这样的事情。

echo "[test1] Joe" | sed 's/\[.*\]\s//g'

这只给了我Joe如何将它与其他列结合起来?

4

4 回答 4

3

正确awk的间距中:

$ awk -F, '{split($2,a," ");printf "||%s || %-4s || %s ||\n",$1,a[2],$3}' file
|| 1 || Joe  || OK ||
|| 2 || Jack || OK ||
|| 3 || Tom  || FAIL ||

您的尝试几乎完成了,您应该看看printfandsplit函数。

于 2013-03-01T09:51:26.817 回答
2

使用 sed:

   sed 's/\[[^]]*\]//;s/^/|| /;s/$/ ||/;s/,/ || /g' input

输出

|| 1 ||  Joe || OK ||
|| 2 ||  Jack || OK ||
|| 3 ||  Tom || FAIL ||

就地开始sed -i

于 2013-03-01T09:10:41.063 回答
0
awk -F"," '{gsub(/,\[.*?\]|,|^|$/," || ",$0) }1' your_file

或者

perl -plne 's/^|,/ || /g;s/\[.*?\]//g' your_file

测试如下:

> cat temp
1,[test1] Joe,OK
2,[test2] Jack,OK
3,[test3] Tom,FAIL
> perl -plne 's/^|,|$/ || /g;s/\[.*?\]//g' temp
 || 1 ||  Joe || OK || 
 || 2 ||  Jack || OK || 
 || 3 ||  Tom || FAIL ||
> awk -F"," '{gsub(/,\[.*?\]|,|^|$/," || ",$0) }1' temp
 || 1 ||  Joe || OK || 
 || 2 ||  Jack || OK || 
 || 3 ||  Tom || FAIL || 
> 

如果要就地替换文件,请使用:

perl -i -plne 's/^|,|$/ || /g;s/\[.*?\]//g' your_file
于 2013-03-01T09:22:14.113 回答
0

单程:

awk -F, '{$1=OFS""$1;$NF=$NF""OFS;sub(/.* /,"",$2);}1' OFS=" || " file

在运行上述:

 ||  1 || Joe || OK ||
 ||  2 || Jack || OK ||
 ||  3 || Tom || FAIL ||
于 2013-03-01T09:08:39.297 回答