Как я могу удалить первый столбец в каждой строке, кроме столбцов в оболочке? - PullRequest
0 голосов
/ 24 апреля 2020

Это пример того, как выглядят мои данные:

ID    pos    gene
1   SAMPLE1   1234     BRCA
2   SAMPLE2   2910    EGFR
3   SAMPLE3   1271    MYC

Это желаемый вывод

ID    pos    gene
SAMPLE1   1234    BRCA
SAMPLE2   2910    EGFR
SAMPLE3   1271    MYC

Я пытался cut -f2- mydata.txt, но при этом удаляется весь столбец и я все еще хотел бы сохранить ID в качестве имени столбца.

Ответы [ 6 ]

1 голос
/ 24 апреля 2020

Как удалить первый столбец в каждой строке, кроме столбцов в оболочке?

Вы можете использовать это awk:

awk 'NR > 1 {sub(/^[ \t]*[^ \t]+[ \t]+/, "")} 1' file

ID    pos    gene
SAMPLE1 1234 BRCA
SAMPLE2 2910 EGFR
SAMPLE3 1271 MYC
1 голос
/ 24 апреля 2020

Использование awk и sub для сохранения пробелов. Если файл разделен табуляцией, забудьте об этом:

$ awk '
FNR==1 {                    # first record
    nf=NF                   # store field count to nf
}
NF>nf {                     # if NF > nf
    for(i=1;i<=NF-nf;i++)   # using sub remove NF-nf first fields
        sub(/^[^ ]+ +/,"")
}1' file                    # output

Вывод:

ID    pos    gene
SAMPLE1   1234     BRCA
SAMPLE2   2910    EGFR
SAMPLE3   1271    MYC
1 голос
/ 24 апреля 2020
$ sed -E '2,$s/[^ ]+ +//' file
0 голосов
/ 24 апреля 2020
$ awk 'NR>1{sub(/[^[:space:]]+[[:space:]]+/,"")}1' file
ID    pos    gene
SAMPLE1   1234     BRCA
SAMPLE2   2910    EGFR
SAMPLE3   1271    MYC

Если ваш файл разделен табуляцией И может иметь пустые 2-е поля или пробелы в 1-м поле, просто измените [^[:space:]]+[[:space:]]+ на ^[^\t]*[\t]

0 голосов
/ 24 апреля 2020

Хитрость для пропуска первой строки в том, что иначе не может обработать строку заголовка, заключается в использовании группы команд , где все в ней имеет одинаковые стандартные входные и выходные потоки. Вы читаете первую строку и выводите ее, а затем настоящая программа работает с остальной частью ввода:

{ IFS= read -r line && echo "$line" && cut -f2-; } < mydata.txt
0 голосов
/ 24 апреля 2020
head -n1 mydata.txt; tail -n +2 mydata.txt | cut -d' ' -f2-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...