![计算间隔](https://linux22.com/image/40054/%E8%AE%A1%E7%AE%97%E9%97%B4%E9%9A%94.png)
如何明确文件中数值之间的间隔? (如果 awk 单行代码更好)
输入:
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
但是,thid 只允许计算间隔内的值的数量。例如,输出将如下所示:
A 3
B 3
答案1
就我个人而言,我会利用 shell 的大括号扩展来做到这一点:
$ 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