linux - 使用 awk 打印由 "-"分隔的变量

标签 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

最佳答案

如果字段是固定的,这样就简单直接多了:

$ 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

关于linux - 使用 awk 打印由 "-"分隔的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38242330/

相关文章:

c++ - 使用Visual C++ for Linux Development时是否可以直接使用linux文件夹/usr/include

php - UTF-8贯穿始终

mongodb - 如何更改mongodb集合中字段的类型

shell - 从 Julia 程序执行 >> shell 运算符

bash - UNIX Bash - 从文件中的特定字符串中删除双引号

linux - 查找当前文件夹中所有包含字符串的 PHP 文件

python - 如何使用 Python 读取文件功能?

python - Linux - IPython 中的换行符

bash - 如何在文件的第二个字段上做基本名称并将其替换为行

regex - 用于验证 csv 字段的 Shell 脚本