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)
您在问题中的 sed 命令实际上是正确的。如果您在新行上看到结果,您要么将终端设置为缩小,而只是看到换行,要么您的实际环境中包含您未在本示例中向我们展示的代码。它按原样工作,但您应该注意两个问题:
使用$的双引号字符串中的表达式的一部分是很危险的。通常这会扩展为 bash 变量。在这种情况下,您/可以避免使用它,因为它后面的字符不是一个有效的有价值的名称,但为了避免这种情况,您确实应该在表达式周围使用单引号。
如果要将内容对齐为列,则可能应该在行尾和要添加的值之间包含某种分隔符。选项卡可能是执行此操作的最简单方法,但您可能应该使用其他字段之间已有的任何分隔符。
结合起来,固定命令可能如下所示:
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'.