2

(同じ人が提出したAWK を通過する元の形式を維持する POST のほぼ正確な複製。 )

以下に示すように、g awkに関する簡単な質問があります。

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

次の gawk コードを使用 - 元のフォーマットを維持するために gensub() を使用:

 gawk '{ print gensub($1, "\t", 1) }' ./sample_code.out

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

g awk または awk (おそらく正規表現を使用) を使用して、フィールド $1 の前の前の空白を削除するにはどうすればよいですか(^ )

以下に図を示します。

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

よろしくお願いします

4

3 に答える 3

4
awk '{sub(/^[ \t]+/, ""); print}'

これは有名な awk 1 ライナー リストからのもので、ここにあります: http://student.northpark.edu/pemente/awk/awk1line.txt

于 2009-01-03T14:22:57.267 に答える
2

これは、「仕事のための間違ったツール」の場合であると私は思います。私はsed`を使用します:

sed 's/^[ <tab>]*//' sample.out

さて、問題が の最も内側の詳細に関するものでawkある場合、これは役に立たないかもしれません。問題がスペースを削除することである場合、それはより迅速で(少なくともほぼ間違いなく)より簡単です。

于 2009-01-03T16:33:03.167 に答える
1

これは機能しますが、常に 3 つのスペースを削除する必要があることを知っておいてください。

vinko@parrot:~$ cat foo.c
  1 int blah (void)
  2 {
  3 if (foo) {
  4 printf ("何とか\n");
  5 }
  6 0 を返します。
  7 }

vinko@parrot:~$ gawk '{ print gensub(/^ /,"",1,gensub($1, "", 1)) }' foo.c    
int blah (無効)
{
        if (foo) {
                printf ("何とか\n");
        }
        0 を返します。
}

于 2009-01-03T14:24:05.440 に答える