如何在Linux shell脚本中将内容打印到最右边的控制台

时间:2017-04-27 17:11:43

标签: linux shell format

说我想搜索" ERROR"在一堆日志文件中。

我想为每个包含" ERROR"的文件打印一行。

在每一行中,我想打印最左边的日志文件路径,而#34; ERROR"在最右边。

我尝试使用:

printf "%-50s %d" $filePath $errorNumber

...但它并不完美,因为黑色控制台可能差异很大,文件路径有时可能很长。

只是为了眼睛的快乐,但我根本无法这样做。 任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

使用set xdata time set timefmt "%Y-%m-%d %H:%M" set format x "%Y-%m-%d\n%H:%M" set xtics 12*60*60 # draw tic labels every 12 hours unset key set ylabel "Tide level in feet" plot "pineIslandSoundTides" u 1:3 with points, "" u 1:3:(stringcolumn(5)) with labels offset 0,-1 SELECT MONTH(dt_column) month_data, COUNT(*) month_count FROM table GROUP BY MONTH(dt_column); ORDER BY month_count DESC;

bash

工作原理:

  1. printf是shell的终端宽度。

  2. printf "%-$(( COLUMNS - ${#errorNumber} ))s%s" \ "$filePath" "$errorNumber" 通过在$COLUMNS之后加printf来保持对齐。所以-打印“ foo ”,然后打印22个空格,然后“ bar ”。

  3. %使用printf "%-25s%s\n" foo bar作为参数长度变量前缀,因此如果bash,那么#就是 3

  4. 花哨的版本,假设两个变量更长,而不是适合一列;如果是这样的话,可以根据需要将它们打印出来:

    x=foo

    广义到一个函数。语法为${#x}printf "%-$(( COLUMNS * ( 1 + ( ${#filePath} + ${#errorNumber} ) / COLUMNS ) \ - ${#errorNumber} ))s%s" "$filePath" "$errorNumber"

    printfLR foo bar

    测试:

    printfLR < file