各数値の範囲と出力ラインの拡張

各数値の範囲と出力ラインの拡張

したがって、次の行を含むデータファイルがあります。

class subject
1-2   x
3     y
4-5   a

クラス列で指定された範囲を抽出し、その範囲に示されるようにトピックのテキストを印刷する必要があります。私はこのようなものを受ける資格があります

class subject
1     x
2     x
3     y
4     a
5     a

ベストアンサー1

使用awk:

awk '{ if ( split($1, range,"-")>1 ){
           for(i=range[1]; i<=range[2]; i++) { print i, $2; };
           next;
       };
     }1' infile

split()最初の文字列を使用-し、最初と2番目のインデックスをループ内の範囲の開始と終了として使用し、毎回範囲にわたって同じ行を増分的に印刷してから、行を読み取り、next範囲がない場合は同じ操作を実行します。 awkのデフォルトの印刷ジョブを使用して行を出力します1

範囲を表すためにダッシュ以外に他の文字がある場合は、関数のsplit()3番目のパラメータを変更してこれを参照できます。たとえば、次のようになります。

split($1, range, /-|,|\.\./)

-,および..範囲文字として扱われます。

入力例(タブ区切り):

class   subject
1,2     x
3       y
4-5     a
3..6    z

出力は、および範囲区切り文字をsplit()認識するように変更されます。-,..

class  subject
1      x
2      x
3      y
4      a
5      a
3      z
4      z
5      z
6      z

おすすめ記事