3

以下に示すように、AWKを使用してストリームからフィールドを削除することに問題があります。

  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }       
  6         return 0;
  7 }  

次のコードを使用して、最初のフィールドを削除します。

$ awk'{$ 1 = ""; 印刷}'example.out

 int blah (void)
 {
 if (foo) {
 printf ("blah\n");
 }
 return 0;
 }

なぜそうなのですか?これは、AWKがすべての空白を削除するためですか?これを防ぐことはできますか?

よろしくお願いします

4

1 に答える 1

2

http://awk.freeshell.org/RangeOfFields

それを行う方法の説明が含まれています。また、問題の3つの解決策が含まれているhttp://student.northpark.edu/pemente/awk/awktail.txtにもリンクしています。私の知る限り、フィールドに割り当てる場合は、出力フィールドセパレータを使用してすべてのフィールドを連結します。" "+突然、1つのスペースに折りたたまれます。でも、一粒の塩でそれを取ってください、私はawkの専門家ではありません。たとえば:、変数OFSに割り当ててみると、スペースの代わりにコロンが出力のフィールド間になります。

echo a b c | awk 'BEGIN{ OFS = ":" } { $1=""; print }'
$ :b:c

g awkを使用する場合は、そのgensub拡張機能を使用できます。これは、非常に簡単に使用できます。

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
于 2009-01-03T02:06:02.887 に答える