GNU/Linux >> Linux の 問題 >  >> Linux

AWK スクリプト出力のフィールドを二重引用符で囲みますか?

必要に応じて:

<ブロック引用>

これを既存のスクリプトに追加してください。

追加の \"\" を挿入できます print の各引数に このように:

print "\"admin\"", "\"base\"", ...

編集済み:

はい、おそらく OFS を設定する方が良い解決策です:

BEGIN { OFS="\";\""; } ... print "\"admin", ...., "simple\"";


awk '{for (i=1;i<=NF;i++) $i="\""$i"\""}1' FS=";" OFS=";" input

エントリを引用符で囲むには、単純な AWK ループを使用できます:

スクリプト - simple_loop.awk

BEGIN {FS=";"}
{
  for(i=1;i<NF;i++){
       printf("\"%s\";", $i); 
  }
  printf("\"%s\"\n",$NF);
}

例えば

echo "admin;base;5.11 HOLSTER SHIRT L WHITE;;" | awk -f simple_loop.awk

出力すべき

"admin";"base";"5.11 HOLSTER SHIRT L WHITE";"";""

この場合、 sed を使用します AWK の代わりの式。

データが data.txt というファイルにある場合 、あなたはそれを書くことができます:

sed "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

それは結果を標準出力に出力しますが、ファイルの内容を置き換えたい場合は sed -i を使用してください このように:

sed -i "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

以上です!!

説明: sed 式は 3 つの sed で構成されます 「;」で区切られたコマンド個別に実行できます:

sed "s/;/\";\"/g

置換を行い (つまり、最初の "s" を意味します)、次に "/" (デフォルトの区切り文字)、";" です。それが私たちが置き換えたいものです。次に、2 番目のセパレーター「/」、および置換:\";\" これは、エスケープされた引用符、セミコロン、およびエスケープされた引用符のシーケンスです。したがって、このコマンドでは、セミコロン ; を置き換えます ";" で .最後の /g; を意味します 置き換えられます (最初のスミコロンだけではありません)。

入力が a;b;c の場合 これが最初のコマンドを実行した後、それは a";"b";"c になります .

ここで、最初に引用符を追加する必要があります (^ 正規表現で) と最後に ($ )。それが意味することです:

sed "s/^/\"/" // the first quote

そして

sed "s/$/\"/" // the last quote

目的の出力を得る:

"a";"b";"c"

Linux
  1. シェル スクリプトでの複数行出力のインデント

  2. パスに bash スクリプトを追加する

  3. csv の二重引用符を削除する方法

  1. スマートクォートを変換するgawkスクリプト

  2. 二重引用符はいつ必要ですか?

  3. Bashスクリプトの変数に改行を追加する方法は?

  1. Sedでテール出力を着色しますか?

  2. Bashスクリプト:コマンド出力の各行を配列内の値に割り当てる方法は?

  3. この sed スクリプトを高速化するにはどうすればよいですか?