Поиск столбцов на основе содержимого соответствующих первых строк

В центос:

cp *.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
0
16.09.2020, 21:15
3 ответа

Используйте csvtool¹:

csvtool -t ' ' -u ' ' namedcol how,are file

-t Input separator char.
-u Output separator char.

 namedcol <names>
    Assuming the first row of the CSV file is a list of column headings,
    this returned the column(s) with the named headings.

¹sudo apt install csvtool

3
18.03.2021, 23:04

С помощью awkвы можете проверить первую строку на соответствие ключевым словам, записать номер столбца, а затем распечатать соответствующие значения:

#first line -> Select columns based on keyword
NR==1 {
  for (i = 1; i <= NF; i++) {
    if ( $i == "how" ) {col_how=i}
    if ( $i == "are" ) {col_are=i}
  }
}
#print selected columns including header line
NR>=1 {
  print $col_how, $col_are
}

Сохранить как, например. script.awkи выполните

awk -f script.awk datafile

РЕДАКТИРОВАТЬ:

Кроме того, ваша идея транспонирования и greping может быть легко реализована:

datamash transpose <datafile | grep 'how\|are' | datamash transpose

используйте -t ' 'для определения пробелов в качестве разделителей. Тем не менее, для очень длинных файлов это может привести к ограничению оперативной памяти. Однако может быть не установлен по умолчанию на большинстве машин.

3
18.03.2021, 23:04
$ cat tst.awk
BEGIN {
    cols = (cols == "" ? "how are" : cols)
    nf = split(cols,tgts)
    FS = OFS = "\t"
}
NR==1 {
    for (i=1; i<=NF; i++) {
        f[$i] = i
    }
}
{
    for (i=1; i<=nf; i++) {
        printf "%s%s", $(f[tgts[i]]), (i<nf ? OFS : ORS)
    }
}

.

$ awk -f tst.awk file
how     are
3       4
8       9

.

$ awk -v cols='are world you Hello' -f tst.awk file
are     world   you     Hello
4       2       5       1
9       7       0       6
2
18.03.2021, 23:04

Теги

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