bash-如何在一行中使用2个数字来创建序列

bash-如何在一行中使用2个数字来创建序列,bash,awk,sed,Bash,Awk,Sed,我有以下文件内容: 2450TO3450 3800 4500TO4560 我想得到这样的东西: 2450 2454 2458 ... 3450 3800 4500 4504 4508 .. 4560 基本上,我需要一个sed/awk中的一行程序,它将读取到分隔符两侧的值,并将这些值注入到seq命令中,或者自己执行循环,并以任意增量将其作为每行的值转储到同一个文件中,比如上面示例中的4 我知道我可以使用多个一个临时文件,执行read命令并

我有以下文件内容:

2450TO3450  
3800  
4500TO4560  
我想得到这样的东西:

2450  
2454  
2458  
...  
3450  
3800  
4500  
4504  
4508  
..  
4560  
基本上,我需要一个
sed
/
awk
中的一行程序,它将读取
分隔符两侧的值,并将这些值注入到
seq
命令中,或者自己执行循环,并以任意增量将其作为每行的值转储到同一个文件中,比如上面示例中的4

我知道我可以使用多个一个临时文件,执行
read
命令并进行排序,但我希望以
cat filename |
等开头的一行代码进行排序,因为它已经是更大脚本的一部分

输入的正确性是有保证的,所以
的左侧总是小于其较大的一侧


谢谢

像这样的东西可能有用:

awk -F TO '{system("seq " $1 " 4 " ($2 ? $2 : $1))}'
这将告诉
awk
system
(执行)命令
seq 10 4 10
用于仅包含10的行(输出10),类似
seq 10 4 40
的命令用于
10TO40
等行。输出似乎与您的示例相符。

如下所示:

awk -F'TO' -v inc=4 'NF==1{print $1;next}{for(i=$1;i<=$2;i+=inc)print i}' file
试一试:

sed 's/TO/ /' file.txt | while read first second; do if [ ! -z "$second" ] ; then seq $first 4 $second; else printf "%s\n" $first; fi; done
sed
用于将
to
替换为空格字符

read
用于读取行,如果有2个数字,
seq
用于生成序列。否则,将打印uniq编号。

给定:

txt="2450TO3450  
3800  
4500TO4560"
你可以做:

echo "$txt" | awk -F TO '{$2<$1 ? t=$1 : t=$2; for(i=$1; i<=t; i++) print i}'
echo“$txt”| awk-F到“{$2这可能适合您(GNU-sed):


如果LHS包含
TO

这对于
sed
awk
来说不是一个好任务,它将导致一些非常神秘的结果。请尝试一个
python-c
一行代码,甚至是一个小的三行脚本。首先尝试了这个脚本,并且似乎可以根据需要工作。谢谢。将尝试其他,也提供反馈。有效且最短,这是重要条件之一。所有awk+宏实际上都有效。感谢这有一些意外行为。尚不确定是什么原因导致它,但在某些情况下它似乎是从0开始的,并且它不会从输出中消除其自身的范围。请共享一些输入数据,不要很抱歉格式化了,仍然掌握着它…上面是输入,下面是输出:
2072到2076到2080 4 8…
一直递增4到2128,然后它又从4开始
echo "$txt" | awk -F TO '{$2<$1 ? t=$1 : t=$2; for(i=$1; i<=t; i++) print i}'
echo "$txt" | awk -F TO -v p=4 '{$2<$1 ? t=$1 : t=$2; for(i=$1; i<=t; i+=p) print i}'
sed -r 's/(.*)TO(.*)/seq \1 4 \2/e' file