Найти и заменить выражение в кавычках на sed

с использованием Миллера(https://github.com/johnkerl/miller)и начиная с

D,E,F,message,score,A,B,C,ID
d,e,f,Let's read a book,24,a,b,c,1
j,k,l,Read this book,39,d,e,f,2
m,n,o,Have you read this book?,15,g,h,i,3

и работает

mlr --csv filter -S '$message=~"(r|R)ead" && $score>20' then cut -f score,ID input.csv >output.csv

у вас будет

score,ID
24,1
39,2

Некоторые подробности о команде:

  • --csv, чтобы установить формат ввода и вывода
  • filter -S '$message=~"(r|R)ead" && $score>20', чтобы применить фильтр
  • cut -f score,IDдля выбора полей

Если у вас неверный CSV-файл, в котором ячеек больше, чем столбцов заголовков, например

D,E,F,message,score,A,B,C,ID
d,e,f,Let's read a book,24,a,b,c,1
j,k,l,Read this book,39,d,e,f,2,a wrong cell,another wrong cell
m,n,o,Have you read this book?,15,g,h,i,3

вы можете применить опцию raggedи запустить

mlr --csv --ragged unsparsify then filter -S '$message=~"(r|R)ead" && $score>20' then cut -f score,ID input.csv>output.csv

Однако, если у вас возникли проблемы с файлом CSV, лучше всего опубликовать его здесь целиком

0
16.01.2021, 17:58
2 ответа

Ваше sedвыражение, кажется, говорит e/.../.../g, а не s/.../.../g.

Команда eявляется расширением GNU для стандартной утилиты sed, которая использует аргумент (вашего шаблона, включая символы /и последний/g)в качестве команды оболочки, заменяя данные с выводом этой команды (немного похожи на подстановку команды ).

К счастью для вас, эта команда не была найдена, а была действительной деструктивной командой оболочки.

1
18.03.2021, 22:36

команда

awk -F "." '{print $1"_j""\""" + str(sys.argv[1]) + ""\"""_h""\""" + str(sys.argv[2]) +""\"""."$2}' filename
 
 sed -e 's/results/&_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + /g' -e 's/\.dat/"&/g' filename

питон

#!/usr/bin/python
m=open('filename','r')
for i in m:
    k=i.split(".")
    print k[0]+'_j" + str(sys.argv[1])+'+'"_h" + str(sys.argv[2]) + ".'+k[1]

выход

ScalarLogger("results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) +".dat",('t',) + exp_data)
0
18.03.2021, 22:36

Теги

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