代码之家  ›  专栏  ›  技术社区  ›  Chris

bash printf格式-避免长行换行

  •  0
  • Chris  · 技术社区  · 7 年前

    输入样本:

    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
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   KamilCuk    7 年前

    你可以用 column

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

    不幸的是,这将在输出中输出额外的“:”:

    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/^           :   /               /'
    
        2
  •  1
  •   RavinderSingh13 Nikita Bakshi    7 年前

    如果你同意的话 awk 在这里,那么下面可能会帮助你,也不确定你的第二行后,分裂它你总是需要3列那里?下面不会这样做。

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

    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
    

    NF>10 根据你的需要这里也按列数太多。如果您正在更改它,那么请将for loop的数字(无论是10)也更改为该数字。