在UNIX环境中操作制表符分隔的表

时间:2018-10-18 20:31:54

标签: bash unix awk sed

我有一个制表符分隔的.txt map.txt文件,如下所示:

#SampleID   BarcodeSequence LinkerPrimerSequence    sample_type Description geneticSampleID
OSBS.087.39.M.32.18.20140227    TCCCTTGTCTCC    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A1   OSBS_087-M-32-18-20140227-gen
OSBS.048.41.M.37.33.20140227    ACGAGACTGATT    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A2   OSBS_048-M-37-33-20140227-gen
OSBS.048.23.M.15.31.20140227    GCTGTACGGATT    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A3   OSBS_048-M-15-31-20140227-gen
OSBS.047.21.M.20.3.20140227 ATCACCAGGTGT    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A4   OSBS_047-M-20-3-20140227-gen
OSBS.119.23.M.18.38.20140227    TGGTCAACGATA    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A5   OSBS_119-M-18-38-20140227-gen
OSBS.047.41.M.22.36.20140227    ATCGCACAGTAA    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A6   OSBS_047-M-22-36-20140227-gen
OSBS.087.41.M.40.21.20140227    GTCGTGTAGCCT    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A7   OSBS_087-M-40-21-20140227-gen
OSBS.048.21.M.5.11.20140227 AGCGGAGGTTAG    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A8   OSBS_048-M-5-11-20140227-gen
OSBS.119.39.M.27.5.20140227 ATCCTTTGGTTC    CGGCTGCGTTCTTCATCGATGC  soil    Plate 1A9   OSBS_119-M-27-5-20140227-gen

我想生成一个新文件,其中第一行是geneticSampleID中的条目,第二行是BarcodeSequence,以便输出看起来像这样:

>OSBS_087-M-32-18-20140227-gen
TCCCTTGTCTCC
>OSBS_048-M-37-33-20140227-gen
ACGAGACTGATT
>OSBS_048-M-15-31-20140227-gen
GCTGTACGGATT
对于map.txt中的所有行,

... etc。因此,如果map.txt有100行(或标题有101行),那么output.txt将有200行。

我知道这可能是一个微不足道的操作,但是我目前非常困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用此df.reindex(df['group'].str.len().sort_values(ascending=False).index)

awk

awk -F '\t' 'NR>1{printf ">%s\n%s\n", $6, $2}' file

答案 1 :(得分:1)

是的,很简单:

tail -n +2 map.txt | cut -f1,2 | tr '\t' '\n'

那给了我

OSBS.087.39.M.32.18.20140227
TCCCTTGTCTCC
OSBS.048.41.M.37.33.20140227
ACGAGACTGATT
OSBS.048.23.M.15.31.20140227
GCTGTACGGATT
OSBS.047.21.M.20.3.20140227
ATCACCAGGTGT
OSBS.119.23.M.18.38.20140227
TGGTCAACGATA
OSBS.047.41.M.22.36.20140227
ATCGCACAGTAA
OSBS.087.41.M.40.21.20140227
GTCGTGTAGCCT
OSBS.048.21.M.5.11.20140227
AGCGGAGGTTAG
OSBS.119.39.M.27.5.20140227
ATCCTTTGGTTC

tail取出第一行。 cut仅给出前两个字段。 tr将制表符替换为回车符。