шаблоны grep и сохранение совпадений в одной строке

grep -E '(".+",){4}".+"' Csv.file
"linux02","cluster26","api2-thrift-apiconf","api.driver.memory","2"
"linux02","cluster26","api2-thrift-apiconf","api.executor.cores","2"
"linux02","cluster26","api2-thrift-apiconf","api.executor.instances","2"
"linux02","cluster26","api2-thrift-apiconf","api.executor.memory","2"
"linux02","cluster26","api2-thrift-apiconf","api.sql.shuffle.partitions","141"
"linux02","cluster26","api2-thrift-apiconf","api.dynamicAllocation.enabled","true"
"linux02","cluster26","api2-thrift-apiconf","api.driver.memory","api2-thrift-apiconf","api.executor.memory"

-Eбудет использовать расширенное регулярное выражение, которое вы ищете 4 раза для ".+",и добавляете один раз для ".+". Но все же вы должны были предоставить немного того, что вы пробовали.

Примечание:Я использовал .+для поиска непустой строки, если вам нужна строка с 5 полями, даже пустая, замените +на*:

grep -E '(".*",){4}".*"' Csv.file
0
20.02.2020, 17:33
2 ответа

Предполагая, что вы ДЕЙСТВИТЕЛЬНО не хотите явно сопоставлять ID, а просто хотите, чтобы первое поле печаталось, когда есть любое другое поле, которое соответствуетmatch:

$ awk '{c=0; for (i=2;i<=NF;i++) if ($i ~ /^match/) printf "%s%s%s", (c++ ? "" : $1), OFS, $i} c{print ""}' file
ID1 match1
ID2 match2 matchABC
4
28.04.2021, 23:22

Попробуйте также

awk '{for (i=1; i<=NF; i++) if ($i !~ /match|ID/) $i=""} 1' file1
ID1   match1 
ID2  match2 matchABC
0
28.04.2021, 23:22

Теги

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