如何使用 Linux 命令行拆分具有多个点的列



我有一个看起来像这样的文件: chr10:100013403..100013414,- 0 0 0 0 chr10:100027943..100027958,- 0 0 0 0 chr10:100076685..100076699,+ 0 0 0 0

我希望输出是这样的: chr10 100013403 100013414 - 0 0 0 0 chr10 100027943 100027958 - 0 0 0 0 chr10 100076685 100076699 + 0 0 0 0

所以,我希望第一列在字段分隔符 = : , ..
我用awk -F":|," '$1=$1' OFS="t" file来分隔第一列。但是,我仍然在为..角色而苦苦挣扎。 我试过awk -F":|,|.." '$1=$1' OFS="t" file但这不起作用。

..应该被转义。

awk -F':|,|\.\.' '$1=$1' OFS="t" file

请务必记住,当您将字符串常量分配为 FS 的值时,它会经历正常的 awk 字符串处理。例如,对于 Unix awk 和 gawk,赋值FS = ".."将字符串..分配给 FS(去掉反斜杠(。这将创建一个正则表达式,意思是"字段由任意两个字符的出现分隔"。如果您希望字段由文本句点后跟任何单个字符分隔,请使用FS = "\.."

https://www.gnu.org/software/gawk/manual/html_node/Field-Splitting-Summary.html

如果您的Input_file与所示示例相同,那么以下内容也可能对您有所帮助。

awk '{gsub(/:|.+|,/,"t");} 1'   Input_file

在这里,我使用 awk 的 gsub 关键字将 (:)(.+ 将接受所有点((,(全局替换为 TAB,然后 1 将打印已编辑/未编辑的Input_file行。我希望这有所帮助。

最新更新