с использованием Миллера(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, лучше всего опубликовать его здесь целиком
Ваше sed
выражение, кажется, говорит e/.../.../g
, а не s/.../.../g
.
Команда e
является расширением GNU для стандартной утилиты sed
, которая использует аргумент (вашего шаблона, включая символы /
и последний/g
)в качестве команды оболочки, заменяя данные с выводом этой команды (немного похожи на подстановку команды ).
К счастью для вас, эта команда не была найдена, а была действительной деструктивной командой оболочки.
команда
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)