したがって、次の行を含むデータファイルがあります。
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