0

gsub を使用してタブをカンマに置き換えています

gsub(/\t/,\",\")

a\tb will be a,b

場合によっては、2 つのタブが互いに続いていることがあります。たとえば、

a/t/tb 

その場合、gsub はそれをa,,b 次のように変換します。そのような場合、文字列を a、-、b (間にマイナス記号) に変換する必要があります。

2つの別々のgsubを書いてみました

gsub(/\t/,\",\") // for tab

gsub(/,,/,\"/,-,/\") // for consecutive commas

2番目はうまくいかないようです。

どうしたの。方法はありますか、両方を 1 つに組み合わせることができgsubます。

4

1 に答える 1

1

awkについて質問していると思いますか?単一の gsub では実行できないと思います。実際には 3 つ必要でした。

$ abc=$(echo 'a.b..c...d....e.....f' | tr . '\t')

$ echo "$abc" | awk '{gsub(/\t/, ","); gsub(/,,/, ",-,"); gsub(/,,/, ",-,"); print}'
a,b,-,c,-,-,d,-,-,-,e,-,-,-,-,f

問題は、単一の gsub on/,,/が両方のコンマを消費するため、3 つ以上連続するコンマがある場合、次のコンマのペアの間にギャップが残ることです。Perl などのより強力な正規表現エンジンでは、先読みを使用して単一のパスで実行できます。

$ echo "$abc" | perl -pe 's/\t/,/g; s/,(?=,)/,-/g;'
a,b,-,c,-,-,d,-,-,-,e,-,-,-,-,f
于 2013-03-13T23:56:02.500 に答える