通过 AWK 保持原始格式 POST 传递

发布于 2024-07-11 07:42:08 字数 467 浏览 7 评论 0原文

我在使用 AWK 简单地从流中删除字段时遇到问题,如下所示:

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

我使用以下代码删除第一个字段:

$ awk '{ $1=""; print }' example.out
 int blah (void)
 {
 if (foo) {
 printf ("blah\n");
 }
 return 0;
 }

为什么会出现这种情况? 这是因为 AWK 删除了所有空格 - 这可以预防吗?

I have an issue with using AWK to simply remove a field from a stream, illustrated below:

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

I use the following code to remove the first field:

$ awk '{ $1=""; print }' example.out
 int blah (void)
 {
 if (foo) {
 printf ("blah\n");
 }
 return 0;
 }

Why is this the case? Is this because AWK removes all whitespace - can this be prevented?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诗酒趁年少 2024-07-18 07:42:08

http://awk.freeshell.org/RangeOfFields

包含如何执行此操作的说明。 它还链接到 http://student.northpark.edu/pemente/awk/awktail。 txt 其中包含该问题的 3 个解决方案。 据我所知,如果分配给一个字段,则输出字段分隔符用于将所有字段连接在一起。 于是" "+突然被折叠成了一个空格。 但请持保留态度,我不是 awk 专家。 例如,尝试将 : 分配给变量 OFS,输出中的字段之间将出现冒号而不是空格:

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

如果您使用 g awk,那么你可以使用它的 gensub 扩展,我发现它的使用非常简单:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 

http://awk.freeshell.org/RangeOfFields

Contains a description how to do it. It also links to http://student.northpark.edu/pemente/awk/awktail.txt which contains 3 solutions to the problem. As far as i know, if you assign to a field, then the output field separator is used to concatenate all fields together. So " "+ suddendly is collapsed to one space. Take it with a grain of salt though, i'm no awk expert. For example, try assigning : to the variable OFS, and colons instead of spaces will result in between fields in the output:

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

If you use gawk, then you can use its gensub extension which i find pretty straight forward to use:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文