Mar*_*cos 4 text command-line bash
对于命令 shell,是否有类似的通用程序column
可以选择将特定列或所有列向右对齐,如果没有也检测数字字段并自动为这些字段执行此操作?
否则,文本处理命令最简洁的方法是什么?
示例以空格分隔的输入已通过管道传输| column -t
:
TVN 20120419 10.08 10.08 9.15 9.6 1630000 9.17 20120419 4.6 83.88 7376600 -0.21858
INTEGERPL 20120419 143.1 148.9 140.3 142.5 2910 138.53 20120405 4.32503 5.55 1642500 1.26158
JSW 20120419 93.55 94.4 91.25 92.7 116000 90.07 20120329 3.86997 8.54 13155770 1.29315
KERNEL 20120419 73.7 74.9 72.9 74.1 56200 71.8 20120404 3.48432 10.71 2819790 1.50892
EUROCASH 20120419 39.49 41.99 39.01 40.73 812000 38.05 20120328 4.85095 20.21 5280548 2.46091
PEKAO 20120419 145.9 147.8 144.0 145.5 292000 140.2 20120404 3.70615 5.48 68858748 2.63889
PKNORLEN 20120419 38.0 38.5 37.25 37.35 1230000 36.26 20120329 4.15476 21.21 104607200 2.65772
Run Code Online (Sandbox Code Playgroud)
注意可读性问题,尤其是。其中记录之间的差异有几个数量级(如倒数第二列)。顺便说一下,格式化价格以始终显示 N 个小数位本身就是一个问题。但是我OFMT="%.4f"
为此使用了 awk 。
对齐和数字字段检测可以通过以下简单awk
程序来实现。
{
width=10;
separator="|";
for (i=1; i<=NF; i++) {
if (match($i, /[-+]*[0-9]+[\.]*[0-9]*/)) {
printf("%"width"s", $i);
}
else {
printf("%-"width"s", $i);
}
if (i == NF) printf("\n");
else printf("%s", separator);
}
}
Run Code Online (Sandbox Code Playgroud)
将其另存为column.awk
.
要测试它是如何工作的,请尝试以下操作:
echo "abc -1.2 def 2 3 hij" | awk -f column.awk
输出是:
abc | -1.2|def | 2| 3|hij
Run Code Online (Sandbox Code Playgroud)
.awk
脚本中有 2 个可调参数:
归档时间: |
|
查看次数: |
9104 次 |
最近记录: |