我有一个看起来像这样的文件:
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行。我希望这有所帮助。