Фильтрация строк фрейма данных с помощью AWK для отображения только записей в заданном поле с экземплярами X

во втором эхе поместите вашу переменную в одинарные кавычки -например:

su username -c "echo '${path_value}'"

Таким образом, echo интерпретирует содержимое переменной как строку, а знак "$" -экранируется.

0
19.04.2020, 17:19
2 ответа

Спасибо Эду Мортону за улучшение скрипта awk:

awk -v n=$1 '
NR==1
{a[$1]=($1 in a ? a[$1] RS : "") $0}
END{for(i in a){if(gsub(RS,"&",a[i])==n-1){print a[i]}}}
' "$2"

NR==1печатает заголовок. Последний оператор вызывает функцию разделения только для проверки количества строк в каждом элементе массива. Если их 4, то они печатаются.

Вы вызываете его с помощью./script 4 file(1-й аргумент — количество повторений, 2-й — имя файла )после того, как он станет исполняемым.

Этот ответ не требует, чтобы строки с одинаковым первым полем располагались рядом друг с другом во входном файле.

1
19.03.2021, 02:28
$ awk -v n=4 '
    NR==1 { print; next }
    $1 != prev { if (cnt==n) printf "%s", buf; prev=$1; cnt=0; buf="" }
    { cnt++; buf=buf $0 ORS }
    END { if (cnt==n) printf "%s", buf }
' file
ID  structureA  structureB
sample_2    1   1
sample_2    2   1
sample_2    1   2
sample_2    2   2
sample_4    1   1
sample_4    2   1
sample_4    3   1
sample_4    4   1
1
19.03.2021, 02:28

Теги

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