尝试在文件中第一次出现变量时在行尾添加文本

时间:2016-11-29 18:13:28

标签: awk sed

我已附上我在下面工作的文字文件: 使用sed我可以得到一个添加文本的结果,但它被添加到包含我的变量的每一行,恰好是" 33"在这种情况下。我只想要文字" SLOTS "添加到文件中的第一个匹配项,并在遇到第一个匹配项时基本停止。 sed添加了文本" SLOTS "对于在我的文本文件中包含我的变量的每一行,还有其他列碰巧与我的变量具有相同的值。我搜索了很多网站以获得理想的结果,但是没有尝试过awk或其他sed示例。任何帮助将不胜感激。

这是我当前的sed行:         sed' / \ b' $ slot_drill' \ b / s / $ / SLOTS /' $ slot_card> $ new_slot_card

我当前的sed行输出的内容:

d25104-1.dr - 面板尺寸:18x24

钻孔:是

刀具主轴进给达到最大位路径时间

尺寸速度命中(最小)

T01 126 1.0 1.0 58 1600 0.0 182.8 1.7
T02 250 1.0 1.0 9 1600 0.0 67.5 0.7
T03 12 1.0 1.0 3965 1600 2.5 514.4 4.6
T04 31 1.0 1.0 65 1600 0.0 62.0 0.6
T05 33 1.0 1.0 569 1600 0.4 46.6 0.4 SLOTS
T06 35 1.0 1.0 33 1600 0.0 45.3 0.4 SLOTS
T07 41 1.0 1.0 97 1600 0.1 79.6 0.7
T08 42 1.0 1.0 135 1600 0.1 104.6 0.9
T09 43 1.0 1.0 33 1600 0.0 53.0 0.5 SLOTS
T10 49.2 1.0 1.0 65 1600 0.0 44.2 0.4
T11 52 1.0 1.0 17 1600 0.0 40.7 0.4
T12 63.5 1.0 1.0 33 1600 0.0 55.6 0.5 SLOTS

T13 98 1.0 1.0 25 1600 0.0 52.0 0.5

总计5104 3.2 1348.2 12.5

所需的输出:

d25104-1.dr - 面板尺寸:18x24

钻孔:是

刀具主轴进给达到最大位路径时间

尺寸速度命中(最小)

T01 126 1.0 1.0 58 1600 0.0 182.8 1.7
T02 250 1.0 1.0 9 1600 0.0 67.5 0.7
T03 12 1.0 1.0 3965 1600 2.5 514.4 4.6
T04 31 1.0 1.0 65 1600 0.0 62.0 0.6
T05 33 1.0 1.0 569 1600 0.4 46.6 0.4 SLOTS
T06 35 1.0 1.0 33 1600 0.0 45.3 0.4
T07 41 1.0 1.0 97 1600 0.1 79.6 0.7
T08 42 1.0 1.0 135 1600 0.1 104.6 0.9
T09 43 1.0 1.0 33 1600 0.0 53.0 0.5
T10 49.2 1.0 1.0 65 1600 0.0 44.2 0.4
T11 52 1.0 1.0 17 1600 0.0 40.7 0.4
T12 63.5 1.0 1.0 33 1600 0.0 55.6 0.5

T13 98 1.0 1.0 25 1600 0.0 52.0 0.5

总计5104 3.2 1348.2 12.5

desired output

2 个答案:

答案 0 :(得分:0)

很难说出你在问什么。一个很好的最小例子可能会省略shell变量并将你正在使用的行完全独立,以便其他人可以在他们自己的系统上运行它。

然而,听起来好像你只是在询问如何限制sed s命令仅适用于它找到匹配的第一行。一般来说,我认为方法是为命令添加前缀,并使用0作为范围的开头。例如:sed '0,/foo/ {s/foo/bar}'将仅替换它找到的第一个foo实例。

这是https://unix.stackexchange.com/questions/188264/want-to-substitute-only-first-occurence-with-sed

给出的这类问题的答案

答案 1 :(得分:0)

awk救援!

简化文件

$ cat file
1
2
3
1
2
3

将SLOT附加到变量slot的第一个匹配项,让我们说3。

$ awk -v value="$slot" '$1==value && !c++{$0=$0 "SLOT"} 1' file

1
2
3SLOT
1
2
3

看看你的例子,你需要使用`$ 2 == value``