繁体   English   中英

使用awk打印由“ - ”分隔的变量

[英]Print variables separated by “-” using awk

我试图在两个以“ - ”分隔的值之间打印所有数字。 我有一个包含多行的文档,如下所示:

14 - 19 |
45 - 50 |

我希望得到如下结果:

14 15 16 17 18 19  
45 46 47 48 49 50

但是我仍然在同一行中获取所有值,尽管我已经设置了ORS和OFS。

有什么我可能会失踪的吗?

#!/bin/bash
awk ' BEGIN{OFS=" ";
            RS="|";
            FS=" ";
            ORS=" "};
{
  for (i=1; i<=NF ; i++)
  {
    if ($i == "-")
    {
      st=$(i-1);
      en=$(i+1);
      st++;
      while (st < en)
      {
         print st;
         st++;
      }
    }
    else
        print $i;
  }
}' list.txt

如果字段是固定的,这更简单直接:

$ awk '{for (i=$1+0;i<=$(NF-1);i++){printf "%d ", i};print ""}' list.txt
14 15 16 17 18 19 
45 46 47 48 49 50

为了防止尾随空间(感谢@fedorqui):

awk '{for (i=$1+0;i<$3+0;i++){printf "%d ", i};print ""$3}' list.txt

每个print都被视为一个单独的记录,因此它在最后添加了ORS

你可以使用printf istead:

#!/bin/bash
awk ' BEGIN{
            RS="|";
            FS=" ";};
{
  for (i=1; i<=NF ; i++)
  {
    if ($i == "-")
    {
      st=$(i-1);
      en=$(i+1);
      st++;
      while (st < en)
      {
         printf "%d ", st;
         st++;
      }
    }
    else
        printf "%d " $i;
  }
  printf "\n"
}' list.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM