标签: seq

如何使用 seq(1) 以相反的顺序显示数字?

我以各种顺序迭代数字。我能够以递增的顺序显示它们,即使是这样的步骤:

$ seq --separator="," 1 10
1,2,3,4,5,6,7,8,9,10
$ seq --separator="," 1 2 10
1,3,5,7,9
Run Code Online (Sandbox Code Playgroud)

我也能够以相反的顺序显示它们,既不是连续的也不是逐步的。

$ seq --separator="," 10 1   
$ seq --separator="," 10 2 1
Run Code Online (Sandbox Code Playgroud)

上述命令没有输出。

我的外壳详细信息:

$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

让我知道如何以降序显示数字?

command-line seq

48
推荐指数
5
解决办法
4万
查看次数

Bash - 同一行中的数字序列

我知道seq生成整数序列的命令,每行一个,但我想问两个问题:

  1. 是否可以将序列的编号写在同一行中?

  2. 是否可以创建由空格分隔的数字序列组成的字符串?

bash seq

29
推荐指数
4
解决办法
8万
查看次数

如何随机化seq的输出?

我知道我可以seq用来生成一个随机的数字列表:1, 2, 3, 4 ...

我想把这些数字变成一个随机的顺序,比如 3、1、4、2……

我知道我可以shuf用来打乱文件的行。所以我可以seq用来将随机数写入一个文件,然后用来shuf对它们进行混洗——或者编写某种混洗函数。但这似乎不必要地复杂。有没有更简单的方法来使用单个命令随机化数组中的项目?

command-line seq

11
推荐指数
1
解决办法
6368
查看次数

替代 GNU seq(1) 的便携式 POSIX shell?

我注意到seq(1)除了 GNU 系统之外,您不能真正指望在任何系统上都可用。seq(1)用 POSIX(不是 bash)shell 编写的我可以随身携带的简单重新实现是什么?

编辑:请注意,我打算至少在各种 BSD、Solaris 和 Mac OS X 上使用它。

posix portability seq

11
推荐指数
3
解决办法
1517
查看次数

生成两个由“|”分隔的数字序列

我正在使用 bash (CentOS 5) 并希望生成此输出(我假设我可以使用seqecho一起使用?):

1|1,
2|2,
3|3,
....
31|31,
32|32,
33|33,
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索seq了两个多小时的例子,我能想到的最接近的是:

echo {1..31}..{1..31} | tr ' ' '\n'
Run Code Online (Sandbox Code Playgroud)

这几乎给了我我想要的东西,但是当我将 .. 更改为 | 甚至“|”)。

我需要的第二代数字以相同的方式格式化,但对于降序年份,即:

2015|2015,
2014|2014,
...
1938|1938,
1937|1937,
1936|1936,
Run Code Online (Sandbox Code Playgroud)

我已经手动输入了这两个列表,但我希望能提供有关如何从命令行完成此操作以供将来需要和学习(seqecho,我假设)的任何输入。

command-line shell text-processing seq

7
推荐指数
6
解决办法
1438
查看次数

如何避免在 seq 完成时打印换行符?

要创建列标题,如下所示:

1234567890123456789
Run Code Online (Sandbox Code Playgroud)

我(正在尝试)使用 seq 和 echo:

seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9
Run Code Online (Sandbox Code Playgroud)

但是, seq 在每次运行后都会输出一个换行符。我怎样才能避免这种情况?

gnu seq

7
推荐指数
3
解决办法
1357
查看次数

使用大数时,如何使 BSD seq 不输出 + 和 e?

假设我运行seq 4000000 4100000,我希望 seq 打印数字,如man页面中引用的那样,“从第一个(默认为 1)到尽可能接近最后一个”。就像 GNU seq 一样。

但是我的命令的输出是

4e+06
4e+06
4e+06
4e+06
4e+06
4.00000e+06
4.00001e+06
Run Code Online (Sandbox Code Playgroud)

我希望它是

4000000
4000001
4000002
Run Code Online (Sandbox Code Playgroud)

等等。

4099999
4100000
Run Code Online (Sandbox Code Playgroud)

我认为也许-w可以解决它,但我不确定要给它什么输入,不给它输入会使输出相同。

osx bsd seq

6
推荐指数
1
解决办法
598
查看次数

seq 十进制分隔符

使用seq带有浮点数的命令,我的输出带有逗号而不是点作为小数点分隔符,尽管在输入中使用了点:

seq 0.1 0.3 1.3
0,1
0,4
0,7
1,0
1,3
Run Code Online (Sandbox Code Playgroud)

我假设这与 locale 相关联LC_NUMERIC,它被设置为de_DE.UTF-8,但是更改为en_US.UTF-8并没有修复它,我使用相同语言环境设置的另一个系统确实返回点。即使通过 eg 明确定义格式-f %1.2也不返回点,而是返回逗号作为小数点分隔符。

我在哪里以及如何改变这种行为?如何确保我的脚本在任何给定系统上都不会出错?显然,如果不通过tr类似方式重新处理,任何输出都将无法用于进一步处理。

在德国时区使用英语安装 Mint,在另一台机器上使用 raspian。


编辑:locale给定机器上的设置:

“逗号”一:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

“点”一:

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

设置LANGUAGE不影响结果。

terminal shell-script seq floating-point

6
推荐指数
1
解决办法
2673
查看次数

`seq` 和 bash 大括号扩展失败

IINM 我的系统在ing时出现故障bash

for i in {0..10000000}; #   Seven zeroes.
do
    false;
done #   `bash` exited and its `tmux` pane/window was closed.
Run Code Online (Sandbox Code Playgroud)

或者

for i in $(seq 0 10000000); #   Seven zeroes.
do
    false;
done #   `bash` exited and its `tmux` pane/window was closed.
Run Code Online (Sandbox Code Playgroud)

但不是什么时候

for i in {0..1000000}; #   Six zeroes.
do
    false;
done #   Finished correctly.
Run Code Online (Sandbox Code Playgroud)

您能否简要解释一下此行为的内部原理并提示完成任务的解决方法?

bash brace-expansion seq

5
推荐指数
1
解决办法
479
查看次数

嵌套大括号扩展和命令替换

我想创建一个简单的 bash 脚本来检查目录是否包含名称包含从 1 到 N 的数字的所有文件。

# Creating some files for testing
$ cd /tmp/
$ mkdir test
$ touch test/a01x.dat
$ touch test/b02y.dat

# Display dir contents
$ ls test/*{01,02}*
test/a01x.dat  test/b02y.dat
Run Code Online (Sandbox Code Playgroud)

但是使用seq命令生成数字会导致以下结果:

$ ls test/*{$(seq -s , -f "%02g" 1 2)}*
ls: cannot access 'test/*{01,02}*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我知道通过用单引号将路径括起来来运行命令一定会导致错误,因为通配符不会扩展

$ ls 'test/*{01,02}*'
Run Code Online (Sandbox Code Playgroud)

但我没有使用它们。问题是什么?

ls bash seq

5
推荐指数
1
解决办法
745
查看次数