我有一个看起来像这样的文件:
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
,但这不起作用。
答案 0 :(得分:1)
..
应该被转义。
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
答案 1 :(得分:0)
如果您的Input_file与显示的示例相同,那么以下内容也可以帮助您。
awk '{gsub(/:|\.+|\,/,"\t");} 1' Input_file
这里我使用awk的gsub关键字全局替换(:)(。+将取所有点)(,)与TAB然后1将打印已编辑/未编辑的Input_file行。我希望这有帮助。