retitle 12482 RFE: seq: add support for int, octal, hex formats in --format thanks
Voelker, Bernhard wrote: > Craig Sanders wrote: > >> seq only supports floating point types like f and g in the --format string. >> >> Other types, including i,d,o,u,x,X would also be useful. >> >> e.g. "seq --format 'prefix%02isuffix' 1 50" to print zero-padded 1-50 with >> user-specified prefix and suffix strings. > > IMO custom format strings for pre- or suffixing are not seq's job. I agreed, initially. The texinfo documentation gives examples of how to convert seq output to hexadecimal (%x) using printf: -------------------- If you want hexadecimal integer output, you can use `printf' to perform the conversion: $ printf '%x\n' `seq 1048575 1024 1050623` fffff 1003ff 1007ff For very long lists of numbers, use xargs to avoid system limitations on the length of an argument list: $ seq 1000000 | xargs printf '%x\n' | tail -n 3 f423e f423f f4240 To generate octal output, use the printf `%o' format instead of `%x'. -------------------- > The OP wanted a little shell solution to create 50 directories > with a fixed prefix and suffix, so what about this? > > seq -w 50 | sed 's/^/prefix/; s/$/suffix/' | xargs mkdir Hmm... The first time I ran an example like the above, I used -w without realizing that there was no need, since the printf format would handle the fixed width part. (the disadvantage with this approach is that you have to pre-compute the width and use that number in the printf format, whereas in Bernie's example, that's done automatically by seq -w. This suggests that seq's --equal-width (-w) option *would* be handy in conjunction with the requested integer format directives. Then, we'd get the benefit of -w along with the more direct use of a seq format string. ) $ seq -w 12 | xargs printf 'a-%02x-b\n' a-01-b a-02-b a-03-b a-04-b a-05-b a-06-b a-07-b a-printf: 08: value not completely converted 00-b a-printf: 09: value not completely converted 00-b a-0a-b a-0b-b a-0c-b [Exit 123] That looks like a bug, but printf is actually required to reject those two input strings. A leading "0" means octal. This does what you want: $ seq 12 | xargs printf 'a-%02x-b\n' a-01-b a-02-b a-03-b a-04-b a-05-b a-06-b a-07-b a-08-b a-09-b a-0a-b a-0b-b a-0c-b