我正在尝试删除|
末尾的$3
并使用tab
插入sed
,但目前只有|
被删除这在以后的awk
命令中不起作用。有没有更好的办法?谢谢你:)。
输入
chr1 955542 955763|AGRN
chr1 957570 957852|AGRN
chr1 976034 976270|AGRN
chr1 976542 976787|AGRN
SED
sed 's/<|>/TAB/g' input > out
当前输出
chr1 955542 955763AGRN
chr1 957570 957852AGRN
chr1 976034 976270AGRN
chr1 976542 976787AGRN
答案 0 :(得分:3)
如果你真的想要一个两步法,你可以删除|
个字符。首先,然后将结果提供给awk
(而不是在awk
中完成所有操作 - 请参阅Lars Fischer对问题 [1] 的评论
),最简单的方法是:
tr '|' '\t' < input > out
顺便说一句,您的sed
命令不会产生您引用的输出。
要在sed
中执行此操作(除非您希望使用-i
进行就地更新),否则您需要:
# GNU Sed
sed 's/|/\t/g' input
# BSD/OSX Sed, from bash/ksh/zsh:
sed 's/|/'$'\t''/g' input
# Fully POSIX-compliant (from a shell that doesn't support $'...' strings)
sed 's/|/'"$(printf '\t')"'/g' input
[1]添加说明:awk -F '[\t |]+' '...'
将-F
(将特殊awk
变量FS
(输入字段分隔符)设置为正则表达式这使得您不仅可以识别以空格分隔的标记作为字段,还可以识别标记中包含的两个字段,例如955763|AGRN
- 这意味着无需对输入进行预处理。
正则表达式[\t |]+
表示:考虑任何混合的制表符,空格和管道符号的非空运行字段分隔符。
答案 1 :(得分:1)
awk '{sub(/\|/,"\t")}1' file
chr1 955542 955763 AGRN
chr1 957570 957852 AGRN
chr1 976034 976270 AGRN