как напечатать CSV из третьего поля

Вы можете сделать это более эффективно в awk: выйти, как только вы нажмете соответствующую строку.

awk 'NR==132 {if (/^#termcapinfo[[:space:]]*xterm Z0=/) found=1; exit}
     END {exit !found}' /etc/screenrc

В качестве альтернативы вы можете использовать GNU sed (но переносимый sed не позволяет указать код выхода).

В качестве альтернативы вы можете использовать философию объединения инструментов Unix: извлечь нужную строку с помощью head и tail и передать ее в grep .

  • s/"//g, удаляет все двойные кавычки.
  • ^([^,]*,){2}, начните с начала строки, уберите все, за чем следует запятая, и повторите это максимум два раза.

Или сawk:

awk -F\" '{$1=$2=$3=$4=$5=""}1' OFS="" infile
3
27.01.2020, 21:49

Похоже дело просто или убрать кавычки и потом печатать с 3-го поля до конца строки:

$ tr -d \" < file | cut -d, -f3-
net2-thrift-netconf,net.driver.memory,2
net2-thrift-netconf,net.executor.cores,2
net2-thrift-netconf,net.executor.instances,2
net2-thrift-netconf,net.executor.memory,2
net2-thrift-netconf,net.sql.shuffle.partitions,141
net2-thrift-netconf,net.dynamicAllocation.enabled,true
net2-thrift-netconf,net.dynamicAllocation.initialExecutors,2
net2-thrift-netconf,net.dynamicAllocation.minExecutors,2
net2-thrift-netconf,net.dynamicAllocation.maxExecutors,20

Таким образом, tr -d \"удаляет кавычки, а cut -d, -f3-печатает от 3-го до последнего,-разделенных полей.

7
27.01.2020, 21:49

Вы действительно должны использовать правильный анализатор CSV для данных CSV. Вот способ использования ruby ​​

ruby -rcsv -e '
  CSV.foreach(ARGV.shift) do |row|
    wanted = row.drop(2)   # ignore first 2 fields
    puts CSV.generate_line(wanted, :force_quotes=>false)
  end
' test
net2-thrift-netconf,net.driver.memory,2
net2-thrift-netconf,net.executor.cores,2
net2-thrift-netconf,net.executor.instances,2
net2-thrift-netconf,net.executor.memory,2
net2-thrift-netconf,net.sql.shuffle.partitions,141
net2-thrift-netconf,net.dynamicAllocation.enabled,true
net2-thrift-netconf,net.dynamicAllocation.initialExecutors,2
net2-thrift-netconf,net.dynamicAllocation.minExecutors,2
net2-thrift-netconf,net.dynamicAllocation.maxExecutors,20

или в виде одного -вкладыша

ruby -rcsv -e 'CSV.foreach(ARGV.shift) {|r| puts CSV.generate_line(r.drop(2), :force_quotes=>false)}' test
2
27.01.2020, 21:49

Теги

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