我有以下文件:
chr1 157784 157887 U6 0 -
chr1 564813 564881 miRNA 0 +
chr1 564879 564950 tRNA 0 -
chr1 564952 565019 tRNA 0 +
chr1 566062 566129 piRNA 0 +
chr1 566137 566205 tRNA 0 -
如果第 4 列中的表达词不以“piRNA”或“miRNA”开头,则替换为单词“rfam”
预期输出:
chr1 157784 157887 rfam 0 -
chr1 564813 564881 miRNA 0 +
chr1 564879 564950 rfam 0 -
chr1 564952 565019 fram 0 +
chr1 566062 566129 piRNA 0 +
chr1 566137 566205 rfam 0 -
注意:字段4中会有很多不同的名称,不仅仅是U6和tRNA。这需要适用于除 piRNA 或 miRNA 之外的任何单词。
答案1
awk -v OFS='\t' '$4 !~ /^[pm]iRNA/ { $4 = "rfam" } ; { $4 = $4 ; print }' file
这正是您所要求的 - 如果字段 4 与 regexp 不匹配^[pm]iRNA
,请将其设置为rfam
.然后打印该行,无论它是否被更改。
注意:我已将输出字段分隔符 (OFS) 设置为选项卡以确保输出一致,并$4 = $4
在 print 语句之前添加(这具有导致输出行中的字段分隔符更改为 OFS 的副作用) -否则,已更改的行将以 OFS 作为默认值(单个空格),而未更改的行将与原始文件中的内容保持不变,这可能会导致在使用cat
或在终端中查看时,列无法正确排列。任何。