計算間隔

計算間隔

ファイルの値間の間隔を消去するには? (一行コードが良い場合)

入力する:

A    1-3
B    5-7

出力

A    1,2,3
B    5,6,7

これまで試したコードは次のとおりです。

sed -i 's/-/\t/g' input #splits the digits to separated columns

awk '{print$1"\t"$3-$2+1}' input > output #prints key and interval width

ただし、間隔内の値の数だけを計算できます。たとえば、出力は次のようになります。

A    3
B    3

ベストアンサー1

個人的には、私はこれを行うためにシェルの中括弧拡張を使用します。

$ while read a b; do echo $a $(eval echo {"$(sed 's/-/../' <<<$b)"}); done < file
A 1 2 3
B 5 6 7

または、カンマを使用して値を区切ります。

$ while read a b; do 
    echo $a $(eval echo {"$(sed 's/-/../' <<<$b)"} | sed 's/ /,/g'); 
  done < file
A 1,2,3
B 5,6,7

awk onelinerをリクエストしたので、次のことを試すことができます。

$ sed 's/-/ /' file | 
    awk '{printf "%s ", $1; for(i=$2;i<=$NF-1;i++){printf "%d,", i}; print $NF}' 
A 1,2,3
B 5,6,7

または、awkですべての操作を実行します。

$ awk '{gsub(/-/," ")}{printf "%s ", $1; 
                       for(i=$2;i<=$NF-1;i++){printf "%d,", i}; print $NF}' file
A 1,2,3
B 5,6,7

おすすめ記事