追加一列

Jay*_*red 2 sed text-processing columns

我已经在这里和其他一些地方进行了搜索,试图找到这个问题的答案,但它似乎非常简单,以至于没有人回答它。我需要做的就是在每一行的末尾添加一个新列中的单个值。我发现的最接近的东西正在使用,sed -i "s/$/green/" ./test.txt但这会将绿色值添加到下一行,我需要将其添加为当前最后一列之后的新列

我有一个这样的文件:

chr -   xyz ordered_A01 5480    6144
chr -   xyz ordered_A01 5480    58001
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像这样:

chr -   xyz ordered_A01 5480    6144    green
chr -   xyz ordered_A01 5480    58001   green
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

chr -   xyz ordered_A01 5480    6144
green
chr -   xyz ordered_A01 5480    5801
green
Run Code Online (Sandbox Code Playgroud)

Cal*_*leb 7

您在问题中的 sed 命令实际上是正确的。如果您在新行上看到结果,您要么将终端设置为缩小,而只是看到换行,要么您的实际环境中包含您未在本示例中向我们展示的代码。它按原样工作,但您应该注意两个问题:

  1. 使用$的双引号字符串中的表达式的一部分是很危险的。通常这会扩展为 bash 变量。在这种情况下,您/可以避免使用它,因为它后面的字符不是一个有效的有价值的名称,但为了避免这种情况,您确实应该在表达式周围使用单引号。

  2. 如果要将内容对齐为列,则可能应该在行尾和要添加的值之间包含某种分隔符。选项卡可能是执行此操作的最简单方法,但您可能应该使用其他字段之间已有的任何分隔符。

结合起来,固定命令可能如下所示:

sed -i 's/$/\tgreen/' ./test.txt
Run Code Online (Sandbox Code Playgroud)

如果结果没有按照您想要的方式排列,您可能会考虑通过管道传输数据col以排列列。

至于您没有向我们展示的内容,问题可能出在您的数据文件中。由于您在评论中提到了写字板和 Excel。我猜你有一个混合的 Windows/Unix 环境。我怀疑问题在于您的数据文件在行尾之前有垃圾非打印序列。你应该做点什么来清理它。一个简单的sed 's/\s*$//'可能是一个开始的地方(行尾除最后一个换行符之外的所有空白字符的条带),但更高级的系统(如 dos2unix 转换器)可能会给您更好的结果。如果那里有二进制垃圾并且文件应该是 ASCI 文本,则可以尝试使用tr -cd '\11\12\15\40-\176'.