特定のフィールドの特殊文字を置き換える方法は?
入力する
xxxx,11/2019,xxx
出力
xxxx,11,2019,xxx
ご覧のとおり、/
in に,
変更したいと思います$2
。
この目標を達成する方法は?
答え1
awk -F, -v OFS=, '{gsub(/\//,",",$2); print}'
これは、グローバル正規表現検索を実行し、フィールド2を置き換えるawk
関数を使用します。gsub()
/
$ 2の最初の項目のみを置き換えるには、sub()
代わりにを使用してくださいgsub()
。
注:デフォルトの出力フィールド区切り文字OFS
は空白です。これを,
(入力フィールドの区切り記号と同じFS
)に設定する必要があります。それ以外の場合は、print
スペースで区切られたすべてのフィールドが出力されます。
GNUのマニュアルページからawk
:
gsub(r, s [, t])
r
正規表現に一致する文字列の各部分文字列に対して文字t
列を置き換え、s
置換回数を返します。指定されていない場合は
t
$ 0が使用されます。代替テキストは
&
実際の一致テキストに置き換えられます。テキストを取得するために使用されます
\&
&。 (次のように入力する必要があります\\&
。参照)GAWK:効率的なAWKプログラミング代替テキストの&およびバックスラッシュ規則のより完全な説明sub()
。 )gsub()
gensub()
答え2
与えられたコマンド以前の回答はるかに簡単かもしれません。テストされ、うまく動作します。
2番目の列にも変更が必要だったので、2番目の列にも同じ内容を追加してテストしてみました。
echo "echo "xxxx,11/2019,xxx xxxx,11/2019,xxx" " |
awk '{print gsub("/",",",$2);print $0}'
出力:
xxxx,11/2019,xxx xxxx,11,2019,xxx