Другая половина вашего вопроса, удаляя только круглые скобки (, но не текст между ними):
echo 'text0 text1 text2 (text3 text4)' |
sed 's/[()]//g'
Выход:
text0 text1 text2 text3 text4
Что-то вроде может работать:
awk -F, '{for (i=1;i<NF-1;i++) if (length($i)==4 && int($i)==$i) printf("%s,%s,", $i,$(i+1))}' input_file
Если вам нужна версия с «абсолютным излишеством», которая удаляет ненужные ,
и добавляет в вывод новые строки, попробуйте
awk -F, '{if (g) printf("\n"); f=0; for (i=1;i<NF-1;i++) if (length($i)==4 && int($i)==$i) {if (f) printf(","); else f=1; printf("%s,%s", $i,$(i+1)); g=1}} END{if (g) printf("\n")}' input_file
Если ваш файл никогда не содержит запятых или новых строк в кавычках, вы можете просто использоватьcut
:
cut -d, -f3,4,6,7 file.csv
-d
определяет разделитель -f
указывает столбцы для вывода ruby -rcsv -e '
CSV.foreach(ARGV.shift) do |row|
puts row.each_cons(2)
.select {|pair| pair.first =~ /^\d{4}$/}
.flatten
.to_csv
end
' file.csv