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 ||

つまり、各列でこのようなことをどのように実行できるかを[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 に答える