使用AWK删除字段前的空格

时间:2009-01-03 14:00:42

标签: linux formatting awk whitespace

同一人提交的Keeping original format POST passing through AWK几乎完全相同。

我有一个关于 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;
     }  

如何在字段$ 1 (^)

之前使用 g awk或awk(可能使用正则表达式)删除前一个空格

如下图所示:

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

提前亲切的问候

3 个答案:

答案 0 :(得分:4)

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

这是来自着名的awk 1衬里列表,可以在这里找到:http://student.northpark.edu/pemente/awk/awk1line.txt

答案 1 :(得分:2)

这让我觉得是“错误的工作工具”。我用sed`:

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

现在,如果问题完全在于awk的最内层细节,那么这可能没有用;如果问题是要删除空格,它会更快,并且(至少可以说是)更简单。

答案 2 :(得分:1)

这样可行,但据您所知,您总是想要删除3个空格。

vinko@parrot:~$ cat foo.c
  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }
  6         return 0;
  7 }

vinko@parrot:~$ gawk '{ print gensub(/^   /,"",1,gensub($1, "", 1)) }' foo.c    
int blah (void)
{
        if (foo) {
                printf ("blah\n");
        }
        return 0;
}