【发布时间】:2017-09-11 11:35:14
【问题描述】:
假设我有一个类似于以下格式的文件:
\\ Random other lines \\
...
27861NA+ NA+89122 13.480 11.554 10.082
27862NA+ NA+89123 2.166 5.896 10.108
27863NA+ NA+89124 8.289 6.843 3.090
27864NA+ NA+89125 12.972 5.936 4.498
27865CL- CL-89126 13.914 2.125 12.915
27866CL- CL-89127 12.050 13.907 3.559
...
\\ Random other lines \\
对于文件中包含字符串“NA+”的前 3 个行实例,我正在尝试用我准备好的字符串替换每行的最后 24 个字符。
例如,理想情况下,我的输出应如下所示:
\\ Random other lines \\
...
27861NA+ NA+89122 my first string hello
27862NA+ NA+89123 my second string foo
27863NA+ NA+89124 my final string bar $$
27864NA+ NA+89125 12.972 5.936 4.498
27865CL- CL-89126 13.914 2.125 12.915
27866CL- CL-89127 12.050 13.907 3.559
...
\\ Random other lines \\
到目前为止,我已经找到了一个 sed 命令,它可以删除文件中每一行的最后 24 个字符:
sed 's/.\{24\}$//' myfile.txt
还有一个 awk 命令,它将返回包含所需子字符串的第 k 行:
awk '/NA+/{i++}i==1' myfile.txt
有没有人知道如何替换文件的第 1、第 2 和第 3 行中每个包含特定子字符串的最后 24 个字符?
【问题讨论】:
-
使用与文件中的字符串“NA+”匹配的 shell 变量创建一个循环运行 3 次。还要比较行数以避免再次匹配同一行。