如何使用awk,perl或sed删除TSV文件中列的最后两个字符?

时间:2017-10-09 14:55:24

标签: bash perl awk sed

我想使用awksedperl从文件A转到文件B:

文件A(标签分隔):

target_id       length  eff_length      est_counts      tpm
ENSORLT00000000001.1    1614    1663.8  266     2.69411
ENSORLT00000000002.8    1641    1724.36 62.1756 0.607613
ENSORLT00000000003.1    1389    1363.82 68.8244 0.850394
ENSORLT00000000004.3    537     484.396 2       0.0695767
ENSORLT00000000005.2    520     374.865 0       0
ENSORLT00000000007.1    1809    2083.96 699     5.65227
ENSORLT00000000008.4    1098    1099.36 423.548 6.49226

文件B(标签分隔):

target_id       length  eff_length      est_counts      tpm
ENSORLT00000000001      1614    1663.8  266     2.69411
ENSORLT00000000002      1641    1724.36 62.1756 0.607613
ENSORLT00000000003      1389    1363.82 68.8244 0.850394
ENSORLT00000000004      537     484.396 2       0.0695767
ENSORLT00000000005      520     374.865 0       0
ENSORLT00000000007      1809    2083.96 699     5.65227
ENSORLT00000000008      1098    1099.36 423.548 6.49226

第一列中的每个id都具有相同的字符数(列标题除外)。

我尝试使用sed 's/ENSORLT*.*\..\t/ENSORLT*/g' FileA > FileB,但我认为*存在问题。

3 个答案:

答案 0 :(得分:1)

sed 's/\..//' file

................

答案 1 :(得分:0)

使用Perl Pie:

perl -pi -e 's/\..//' file

......竞争; - )

答案 2 :(得分:0)

awk 'NR>1{sub(/..$/,"",$1)}1' OFS="\t" file

target_id       length  eff_length      est_counts      tpm
ENSORLT00000000001  1614    1663.8  266 2.69411
ENSORLT00000000002  1641    1724.36 62.1756 0.607613
ENSORLT00000000003  1389    1363.82 68.8244 0.850394
ENSORLT00000000004  537 484.396 2   0.0695767
ENSORLT00000000005  520 374.865 0   0
ENSORLT00000000007  1809    2083.96 699 5.65227
ENSORLT00000000008  1098    1099.36 423.548 6.49226