Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash printf格式-避免长换行_Bash_Printf - Fatal编程技术网

bash printf格式-避免长换行

bash printf格式-避免长换行,bash,printf,Bash,Printf,输入样本: line1:word word line2:word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word wo

输入样本:

line1:word word
line2:word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word
line3:word word word
当我用printf格式化它时,孤独的一行被包装了——如何避免它

$ cat input_test|while IFS=: read a b;do printf "%-10s %-3s %s\n" "$a" ":" "$b";done
line1      :   word word
line2      :   word word word word word word word word word word word word word word word word word word word word word 
word word word word word word word word word word word word word word word word word word word word word word word word 
word word word word word word word word word
line3      :   word word word
如果第二列(以冒号分隔)长于终端中可能的行字符数,则预期输出为:

line1      :   word word
line2      :   word word word word word word word word word word word word word word word word word 
               word word word word word word word word word word word word word word word word word 
               word word word word word word word word word word word word word word word word word 
               word word word
line3      :   word word word
您可以使用:

遗憾的是,这将在输出中输出额外的“:”:

line1      :   word word
line2      :   word word word word word word word word word word word word word word word word word 
           :   word word word word word word word word word word word word word word word word word 
           :   word word word word word word word word word word word word word word word word word 
           :   word word word
line3      :   word word word
我们可以使用
sed
删除它们:

cat input_test | column -c100 -s: -o'      :   ' -t -W2 | sed 's/^           :   /               /'
您可以使用:

遗憾的是,这将在输出中输出额外的“:”:

line1      :   word word
line2      :   word word word word word word word word word word word word word word word word word 
           :   word word word word word word word word word word word word word word word word word 
           :   word word word word word word word word word word word word word word word word word 
           :   word word word
line3      :   word word word
我们可以使用
sed
删除它们:

cat input_test | column -c100 -s: -o'      :   ' -t -W2 | sed 's/^           :   /               /'

如果您对这里的
awk
没有问题,那么下面的内容可能会对您有所帮助,也不确定您的第2行在拆分后是否需要3列?下面的内容不会做到这一点

awk -v s1="\t" '{sub(/:/,"      :     ",$1)}NF>10{;for(i=10;i<=NF;i+=10){$i=$i ORS s1 s1}} 1' Input_file

您可以根据需要更改
NF>10
,此处也可以根据列数进行更改。如果您正在更改,请将循环的数字(无论是10)也更改为该数字。

如果您对
awk
无异议,那么下面的内容可能会对您有所帮助,也不确定拆分后的第2行您始终需要3列?下面的内容不会做到这一点

awk -v s1="\t" '{sub(/:/,"      :     ",$1)}NF>10{;for(i=10;i<=NF;i+=10){$i=$i ORS s1 s1}} 1' Input_file
您可以根据需要更改
NF>10
,此处也可以根据列数进行更改。如果您正在更改,请将循环的数字(无论是10)也更改为该数字