извлечь столбцы, содержащие определенную строку в заголовке

En Bash, puede agregar a una variable usando var+=value. Pero su problema no es ese, sino generar la nueva línea. La forma más fácil es usar $'..'comillas, que interpreta los escapes de barra invertida -como \npara nueva línea:

a+=$'\nfile4'
1
30.07.2019, 18:35
3 ответа

perl позволяет получить красивое лаконичное решение:

perl -ale '
    @cols = grep {$F[$_] =~ /sample/} 0..$#F if $. == 1;
    print "@F[@cols]";
' file
2
27.01.2020, 23:17

А как насчет этого?

NR==1   {
        for (i=1; i<=NF; i++) {
                if ($i ~ /sample/) {
                        head[i]= $i
                        printf "%s\t", $i
                }
        }
        printf "\n"
}

NR>1    {
        for (i=1; i<=NF; i++) {
                if (head[i]) {
                        printf "%s\t", $i
                }
        }
        printf "\n"
}

Несколько наивный подход, но он работает с небольшими файлами.

1
27.01.2020, 23:17
$ awk '
    BEGIN { FS=OFS="\t" }
    NR==1 {
        for (inFldNr=1; inFldNr<=NF; inFldNr++) {
            if ($inFldNr ~ /sample/) {
                out2inFldNr[++numOutFlds] = inFldNr
            }
        }
    }
    {
        for (outFldNr=1; outFldNr<=numOutFlds; outFldNr++) {
            inFldNr = out2inFldNr[outFldNr]
            printf "%s%s", $inFldNr, (outFldNr<numOutFlds ? OFS : ORS)
        }
    }
' file
sample  sample_CCC      sample_FFF
000     ccc     fff
1
27.01.2020, 23:17

Теги

Похожие вопросы