我想用相乘的数字替换模式之间的数字并打印所有行。该文件是 newick 格式的树文件,仅包含一行。我的目标是之后)
和之前的所有数字:
。我想将两个符号之间的所有数字乘以 100。
文件:
((((A_8:0.000846,(A_5:0.002449,(A_1:1e-06,((A_4:1e-06,((A_7:1e-06,A_6:0.001061)0.714000:1e-06,A_3:1e-06)0.314500:1e-06)0.358667:1e-06,A_2:1e-06)0.361000:1e-06)0.434800:1e-06)0.683500:0.001619)0.888571:0.001931,A_9:0.00069)0.688471:0.000691,...
Run Code Online (Sandbox Code Playgroud)
对我来说,最简单的方法似乎是通过先用新行替换所有“:”符号来拆分文件。所以我所有的目标数字现在都在单独的行中并出现在)
. 然后,我使用下面的 awk 脚本将目标数字乘以 100,但没有设法保留没有目标数字的行。
脚本:
((((A_8:0.000846,(A_5:0.002449,(A_1:1e-06,((A_4:1e-06,((A_7:1e-06,A_6:0.001061)0.714000:1e-06,A_3:1e-06)0.314500:1e-06)0.358667:1e-06,A_2:1e-06)0.361000:1e-06)0.434800:1e-06)0.683500:0.001619)0.888571:0.001931,A_9:0.00069)0.688471:0.000691,...
Run Code Online (Sandbox Code Playgroud)
)
在这种情况下,如何将数字相乘并打印整个文件?或者还有其他更简单的方法可以直接查找:
和之间的数字)
,将它们乘以 100 并打印整个文件?
更新:预期输出
((((A_8:0.000846,(A_5:0.002449,(A_1:1e-06,((A_4:1e-06,((A_7:1e-06,A_6:0.001061)71.4000:1e-06,A_3:1e-06)31.4500:1e-06)35.8667:1e-06,A_2:1e-06)36.1000:1e-06)43.4800:1e-06)68.3500:0.001619)88.8571:0.001931,A_9:0.00069)68.8471:0.000691,...)
Run Code Online (Sandbox Code Playgroud) 我需要检查我的整个文件是否只包含 4 个字符;“A”、“T”、“G”和“C”。我曾经使用 sed 拆分字符,然后使用 grep -o 和 -v 来排除要检查的目标字符。
在 linux 中是否有任何简单直接的方法可以做到这一点?使用 sed/awk/grep?
(似乎有关于这个相关问题的建议,但他们在命令中包含了整个文本。我的文件大小太大了。)
例如,输入文件中有四行,该行中可能存在其他字符(ATGC 除外)。如果可能,我想检测奇数字符并显示奇数字符以及它们所在的行数。
输入:
ATTGTAAGGTAAGTGGATTYTCCGGGRETC
TTVGGATCGTTGACCAGTK
GCCCGGGCCGGTCCTTTGGTGCGTGGGG
CTCTCCCAACCCCCCCACCCTCGACCTGAGCTCAGGCXC
Run Code Online (Sandbox Code Playgroud)
期望输出:
1:Y
1:R
1:E
2:V
2:K
4:X
Run Code Online (Sandbox Code Playgroud) 我一直在wc -l
用来检查我的文件中存在的行数。它总是运行良好,但这次不行。
我有 120 个大文件,每个文件应该至少有两行。我刚刚对这些文件进行了一些文本编辑工作,以删除和添加新行。我试图wc -l *
像往常一样使用来检查最终的行数。输出显示大多数文件只有一行。
我打开了其中一个文件(从命令的结果中显示它只有一行),vim
我可以看到它正好有 2 行。退出vim
并使用 再次检查wc -l
,该文件的行数然后显示为 2。
有人知道这里发生了什么吗?我该如何解决这个问题而不是打开所有 120 个文件vim
?
PS:我的文件的最后一行不是空的。