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

时间:2016-07-07 09:46:25

标签: linux shell 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

2 个答案:

答案 0 :(得分:2)

如果字段已修复,则更加简单直接:

$ 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

答案 1 :(得分:1)

每个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