簡體   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