如何使用Linux命令行

时间:2017-08-25 00:50:19

标签: linux awk

我有一个看起来像这样的文件: 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,但这不起作用。

2 个答案:

答案 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行。我希望这有帮助。