Если найти 4-значное число, вывести число и значение следующей строки в csv

Другая половина вашего вопроса, удаляя только круглые скобки (, но не текст между ними):

echo 'text0 text1 text2 (text3 text4)' |
   sed 's/[()]//g'

Выход:

text0 text1 text2 text3 text4
-1
13.02.2020, 13:55
3 ответа

Что-то вроде может работать:

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
2
28.04.2021, 23:23

Если ваш файл никогда не содержит запятых или новых строк в кавычках, вы можете просто использоватьcut:

cut -d, -f3,4,6,7 file.csv
  • -dопределяет разделитель
  • -fуказывает столбцы для вывода
0
28.04.2021, 23:23
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
0
28.04.2021, 23:23

Теги

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