shell - 用文件编程
问题描述
我该如何编写这个程序?C Shell 可能是合适的,但是,它并不重要。
该程序读取包含两列数字的输入文件,并为输出程序提供这两个原始列并添加三列数字。在每个添加的列中将是相同的数字(在第三列中为 1.000,在第四列中为 1,在第五列中为 6)。列之间将定义空格数:第 1 列 3 个空格 第 2 列 5 个空格 第 3 列 5 个空格 第 4 列 4 个空格 第 5 列。
非常感谢您的帮助。
输入:
56603.6153 2.2126
56603.6156 2.2156
56603.6158 2.2108
56603.6161 2.2161
56603.6163 2.2012
56603.6166 2.2049
56603.6168 2.1952
56603.6171 2.2195
56603.6173 2.2107
56603.6176 2.1998
56603.6178 2.2163
56603.6180 2.2240
56603.6183 2.2185
56603.6185 2.2216
56603.6188 2.2266
56603.6190 2.2106
56603.6193 2.2007
56603.6195 2.2202
56603.6198 2.2277
56603.6203 2.2119
56603.6205 2.1995
56603.6208 2.1996
56603.6210 2.2134
56603.6213 2.2238
56603.6217 2.2016
56603.6220 2.2012
56603.6222 2.2125
56603.6225 2.2124
56603.6227 2.2064
输出
56603.6153 2.6326 1.000 1 6
56603.6156 2.6356 1.000 1 6
56603.6158 2.6308 1.000 1 6
56603.6161 2.6361 1.000 1 6
56603.6163 2.6212 1.000 1 6
56603.6166 2.6249 1.000 1 6
56603.6168 2.6152 1.000 1 6
56603.6171 2.6395 1.000 1 6
56603.6173 2.6307 1.000 1 6
56603.6176 2.6198 1.000 1 6
56603.6178 2.6363 1.000 1 6
56603.6180 2.6440 1.000 1 6
56603.6183 2.6385 1.000 1 6
56603.6185 2.6416 1.000 1 6
56603.6188 2.6466 1.000 1 6
56603.6190 2.6306 1.000 1 6
56603.6193 2.6207 1.000 1 6
56603.6195 2.6402 1.000 1 6
56603.6198 2.6477 1.000 1 6
56603.6203 2.6319 1.000 1 6
56603.6205 2.6195 1.000 1 6
56603.6208 2.6196 1.000 1 6
56603.6210 2.6334 1.000 1 6
56603.6213 2.6438 1.000 1 6
56603.6217 2.6216 1.000 1 6
56603.6220 2.6212 1.000 1 6
56603.6222 2.6325 1.000 1 6
56603.6225 2.6324 1.000 1 6
56603.6227 2.6264 1.000 1 6
56603.6230 2.6292 1.000 1 6
56603.6232 2.6294 1.000 1 6
解决方案
使用 awk 。这里设置列之间的静态空间:
$ awk '{print $1 " " $2 " 1.000 1 6"}' file
56603.6153 2.2126 1.000 1 6
56603.6156 2.2156 1.000 1 6
56603.6158 2.2108 1.000 1 6
...
您还可以使用printf
及其修饰符为列保留空间。在这里,我们为第二列保留了 9 个右对齐空格,对于 6 个字符的列,列之间需要保留 3 个字符,但是:
$ awk '{printf "%s%9s\n", $1, $2}' file
56603.6158 2.2108
56603.6161 2.2161
56603.6163 20.2012
|---9---|
为左对齐的第一列保留空间:
$ awk '{printf "%-13s%s\n", $1, $2}' file
56603.6153 2.2126
56603.6161 2.2161
56603.6163 20.2012
|----13-----|
等等:
$ awk '{printf "%-13s%-11s%s\n", $1, $2, 1000}' file
56603.6153 2.2126 1000
56603.6156 2.2156 1000
56603.6163 20.2012 1000
|----13-----||---11----|
和:
$ awk '{printf "%-13s%-11s%-9s%-5s%s\n", $1, $2, 1000, 6, 1}' file
56603.6153 2.2126 1000 6 1
56603.6161 2.2161 1000 6 1
56603.6163 20.2012 1000 6 1
推荐阅读
- javascript - 使用 Chai 和 Jest 测试“HTMLElement”DOM 元素时出错
- sql-server - 使用 ormlite 服务中的 sp_getapplock - 始终返回 0 - 无法实现分布式锁
- android - 如何在约束布局android中给出百分比权重
- javascript - 从 JSInterop 调用返回图像时,Blazor WebAssembly 出现“内存访问越界错误”
- c++ - 为什么以下 Hello World 程序在 PowerShell 上没有显示任何输出?相同的程序在 CMD 上显示正确的输出
- python - 如何在不模拟的情况下临时替换 Python 类方法?
- javascript - Str.Slice 切片空间
- python - python如何识别下例中是否在print语句后声明了局部变量?
- python - Pygame空白(黑色)屏幕
- assembly - 需要帮助将正确的结果输入 0500 地址