仅在一个列中消除两个^字符后的所有内容

data table

你好, 我用制表符分隔此数据。 在笔录列中,我只想删除第二次出现字符^之后的所有内容

我尝试过

awk -F_ 'NF> 3 {$ 0 = $ 1 FS $ 3 FS $ 5} 1'

但删除其他列中的所有数据

ptpstao 回答:仅在一个列中消除两个^字符后的所有内容

如果我们只关心一列,而笔录列是第一列,那么:

awk -F '\t' -v OFS='\t' -v t=1 '
    match($t,/\^[^^]*\^/) { $t = substr($t,RSTART,RLENGTH) } 1
'

我们使用match()的结果来触发操作,而不是直接使用正则表达式。 match()的副作用是设置RSTARTRLENGTH ...这正是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)-从数组和其余列中打印第一个和第二个元素
本文链接:https://www.f2er.com/3130957.html

大家都在问