你好, 我用制表符分隔此数据。 在笔录列中,我只想删除第二次出现字符^之后的所有内容
我尝试过
awk -F_ 'NF> 3 {$ 0 = $ 1 FS $ 3 FS $ 5} 1'
但删除其他列中的所有数据
你好, 我用制表符分隔此数据。 在笔录列中,我只想删除第二次出现字符^之后的所有内容
我尝试过
awk -F_ 'NF> 3 {$ 0 = $ 1 FS $ 3 FS $ 5} 1'
但删除其他列中的所有数据
如果我们只关心一列,而笔录列是第一列,那么:
awk -F '\t' -v OFS='\t' -v t=1 '
match($t,/\^[^^]*\^/) { $t = substr($t,RSTART,RLENGTH) } 1
'
我们使用match()
的结果来触发操作,而不是直接使用正则表达式。 match()
的副作用是设置RSTART
和RLENGTH
...这正是substr()
为我们隔离模式所需要的。
您要在不想删除的第一个字段中找到一个子字符串:
没有^
的字符串(由[^^]*
给出,其中第一个^
代表NOT),
然后是^
(转义),然后是[^^]*\^
。\1
将记住/恢复该字符串,其余部分将被删除,直到\t
。
sed -r 's/([^^]*\^[^^]*\^)[^\t]*/\1/' datafile
如果不是所有行的第一个字段中都有两个^
,您可以将其更改为
sed -r 's/^([^\t^]*\^[^\t^]*\^)[^\t]*/\1/' datafile
,
$ text="TRINITY_DN686_c0_g1_i6^YJHO_YEAST^IKS1_YEAST\tcolumn2\tcolumn3\tcolumn4"
$ echo -e ${text} | awk '{ i = index($0,"\t"); split($1,a,"^"); print a[1]"^"a[2] substr($0,i) }'
TRINITY_DN686_c0_g1_i6^YJHO_YEAST column2 column3 column4
i = index($0,"\t")
-获取第一个标签的索引split($1,"^")
-用脱字符号分隔第一列,并将元素存储在数组中print a[1]"^"a[2] substr($0,i)
-从数组和其余列中打印第一个和第二个元素