csv файл добавление и удаление символов из строк [закрыто]

У меня есть большой csv, который выглядит так

else if(a,b,c,d,e)
else if(a,b,c,d,f)

Я хочу сделать так

else if(a+x==b and b+x==c and c+x==d and d+x==e)
else if(a+x==b and b+x==c and c+x==d and d+x==f)

У меня не всегда 5 переменных, в некоторых строках их меньше, 5 - максимум, 2 - минимум.

в общем, уберите запятые и добавьте после каждой переменной, var+x==var2 и var2+x==var3; чтобы это выглядело как C++ if statement. Можно ли это сделать в sed, awk или perl? Меня в основном интересует awk, в целях обучения, но любое решение будет хорошим, если оно работает.

1
задан 23 October 2014 в 15:26

3 ответа

Пропустите perl часть и попробуйте это:

awk -F',' '{x = $1"+x=="$2; \
    for (i=2; i< NF; i++) { \
         x = x " and " $i "+x=="$(i+1) \
    }; \
    print "else if" x \
}'

Эффект:

$ echo '(a,b,c,d,e)' | awk -F',' '{x = $1"+x=="$2; \
quote>     for (i=2; i< NF; i++) { \
quote>          x = x " and " $i "+x=="$(i+1) \
quote>     }; \
quote>     print "else if" x \
quote> }'
else if(a+x==b and b+x==c and c+x==d and d+x==e)

не было бы слишком трудно заставить его уже работать с выводом perlelse if в), но использование одного инструмента для задания лучше, если это не усложняет вещи (как в этом случае).

2
ответ дан 10 November 2019 в 18:05

Один путь:

echo "else if(a,b,c,d,e)" | perl -pe 's/,([a-z])(?=[^)])/+x==$1 and $1/g; s/,([a-z])/+x==$1/'
4
ответ дан 10 November 2019 в 18:05

Чистое текстовое решение для Python. Требуется по крайней мере 2 переменные, никакой максимум.

#!/usr/bin/env python3

sourcefile = "/path/to/sourcefile"

def newline(oldline):
    subject = oldline.replace(" ", "").split("(")[-1].replace(")", "").split(",")
    out = [subject[i]+"+x=="+subject[i+1] for i in range(len(subject)-1)]
    print("else if("+" and ".join(out)+")")

with open(sourcefile) as sc:
    for line in [line.strip() for line in sc.readlines()]:
        newline(line)

Копия это в пустой файл, сохраните его как edit.py, установите путь к исходному файлу, выполните его:

python3 /path/to/edit.py

это преобразовывает:

else if(a,b)
else if(a,b,c,d,f)
else if(a,b,c,d,f,q,t)

в:

else if(a+x==b)
else if(a+x==b and b+x==c and c+x==d and d+x==f)
else if(a+x==b and b+x==c and c+x==d and d+x==f and f+x==q and q+x==t)
2
ответ дан 10 November 2019 в 18:05

Другие вопросы по тегам:

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