ファイルの値間の間隔を消去するには? (一行コードが良い場合)
入力する:
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