我以各种顺序迭代数字。我能够以递增的顺序显示它们,即使是这样的步骤:
$ 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)
让我知道如何以降序显示数字?
我知道seq生成整数序列的命令,每行一个,但我想问两个问题:
是否可以将序列的编号写在同一行中?
是否可以创建由空格分隔的数字序列组成的字符串?
我知道我可以seq用来生成一个随机的数字列表:1, 2, 3, 4 ...
我想把这些数字变成一个随机的顺序,比如 3、1、4、2……
我知道我可以shuf用来打乱文件的行。所以我可以seq用来将随机数写入一个文件,然后用来shuf对它们进行混洗——或者编写某种混洗函数。但这似乎不必要地复杂。有没有更简单的方法来使用单个命令随机化数组中的项目?
我注意到seq(1)除了 GNU 系统之外,您不能真正指望在任何系统上都可用。seq(1)用 POSIX(不是 bash)shell 编写的我可以随身携带的简单重新实现是什么?
编辑:请注意,我打算至少在各种 BSD、Solaris 和 Mac OS X 上使用它。
我正在使用 bash (CentOS 5) 并希望生成此输出(我假设我可以使用seq或echo一起使用?):
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)
我已经手动输入了这两个列表,但我希望能提供有关如何从命令行完成此操作以供将来需要和学习(seq或echo,我假设)的任何输入。
要创建列标题,如下所示:
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 在每次运行后都会输出一个换行符。我怎样才能避免这种情况?
假设我运行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可以解决它,但我不确定要给它什么输入,不给它输入会使输出相同。
使用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不影响结果。
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 脚本来检查目录是否包含名称包含从 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)
但我没有使用它们。问题是什么?
seq ×10
bash ×3
command-line ×3
bsd ×1
gnu ×1
ls ×1
osx ×1
portability ×1
posix ×1
shell ×1
shell-script ×1
terminal ×1