Discussion:
sprintf: max number of characters printed?
(too old to reply)
Konstantinos Anagnostopoulos
2021-11-02 17:00:41 UTC
Permalink
Hi I am trying to write a string to be used as a command in a script.

When the filenames are too long the string get truncated. See e.g.:

files="aaaD_01.ava0 aaaD_02.ava0 aaaD06N0012n0004s+01.0000k001.0000B001.0000K000.9368i-02.2617e+00.0000m+01.0000g02.ava0 1234567890123456789012345678901234567890123456789001234567890012345678900123456789001234567890"

do for [f in files]{ print sprintf("head %s|awk '/srkappa/{printf \"(\%7.4f,\%7.4f)\",$4,$5}'",f)}

Produces the output:

head aaaD_01.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head aaaD_02.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head aaaD06N0012n0004s+01.0000k001.0000B001.0000K000.9368i-02.2617e+00.0000m+01.0000g02.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$
head 1234567890123456789012345678901234567890123456789001234567890012345678900123456789001234567890|awk '/srkappa/{printf "(%7.4f,%7


i.e. the last two commands are incomplete. Is there a way to control this output? Thank you.

I am suing gnuplot 5.2 patchlevel 8 last modified 2019-12-01 on ubuntu 20.04.
Konstantinos Anagnostopoulos
2021-11-02 17:40:50 UTC
Permalink
OK, replacing %s -> %120s (or %-120s) does not chop the command and prints it correctly, but it is still a mystery why %s prints the output as mentioned before since it does not chop the string corresponding to %s but the last characters of the resulting string.

files="aaaD_01.ava0 aaaD_02.ava0 aaaD06N0012n0004s+01.0000k001.0000B001.0000K000.9368i-02.2617e+00.0000m+01.0000g02.ava0 1234567890123456789012345678901234567890123456789001234567890012345678900123456789001234567890END"

do for [f in files]{ print sprintf("head %120s|awk '/srkappa/{printf \"(\%7.4f,\%7.4f)\",$4,$5}'",f)}
head aaaD_01.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head aaaD_02.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head aaaD06N0012n0004s+01.0000k001.0000B001.0000K000.9368i-02.2617e+00.0000m+01.0000g02.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head 1234567890123456789012345678901234567890123456789001234567890012345678900123456789001234567890END|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
Post by Konstantinos Anagnostopoulos
Hi I am trying to write a string to be used as a command in a script.
files="aaaD_01.ava0 aaaD_02.ava0 aaaD06N0012n0004s+01.0000k001.0000B001.0000K000.9368i-02.2617e+00.0000m+01.0000g02.ava0 1234567890123456789012345678901234567890123456789001234567890012345678900123456789001234567890"
do for [f in files]{ print sprintf("head %s|awk '/srkappa/{printf \"(\%7.4f,\%7.4f)\",$4,$5}'",f)}
head aaaD_01.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head aaaD_02.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$4,$5}'
head aaaD06N0012n0004s+01.0000k001.0000B001.0000K000.9368i-02.2617e+00.0000m+01.0000g02.ava0|awk '/srkappa/{printf "(%7.4f,%7.4f)",$
head 1234567890123456789012345678901234567890123456789001234567890012345678900123456789001234567890|awk '/srkappa/{printf "(%7.4f,%7
i.e. the last two commands are incomplete. Is there a way to control this output? Thank you.
I am suing gnuplot 5.2 patchlevel 8 last modified 2019-12-01 on ubuntu 20.04.
Loading...