计算间隔

计算间隔

如何明确文件中数值之间的间隔? (如果 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

相关内容