Мне нужно удалить все содержимое, которое появляется в столбце после определенного символа в CSV-файле. Это формат, в котором он находится в данный момент:
2020-01-01T12:00:00,Transaction Description,Initiator,$00.00
Я хочу удалить содержимое в первом столбце, которое следует после T, чтобы это выглядело так:
2020-01-01,Transaction Description,Initiator,$00.00
Я попробовал sed, но он не сработал так, как ожидалось.
решение1
Использование стандарта sed
аналогичноТимур использует Perl:
$ sed 's/T[^,]*//' file
2020-01-01,Transaction Description,Initiator,$00.00
Это удаляет весь текст с первой буквы T
в каждой строке до первой запятой (но не включая ее) с помощью замены.
Перейдите в новый файл, чтобы сохранить результат.
решение2
Используйте эту однострочник Perl:
perl -pe 's{T[^,]*}{}' input_file > output_file
Здесь
-e
флаг командной строки сообщает Perl, что нужно использовать код, который следует в строке, а не искать код в указанном скрипте,
-p
сообщает Perl, что нужно перебирать ввод по одной строке за раз, печатая его после выполнения указанного кода,
s{T[^,]*}{}
заменяет T
за которым следуют любые символы, отличные от ,
нуля или более раз ( *
указывает жадное или самое длинное совпадение). Это «съедает» символы, начиная с первой T, включительно, и заканчивая первой следующей запятой, не включая.
решение3
Метод1:
awk -F "," 'OFS=","{gsub(/T.*/,"",$1);print $0}' filename
выход
2020-01-01,Transaction Description,Initiator,$00.00
команда2
perl -pne "s/,/\n/g" filenmame| sed '/.T/s/T.*//g'|perl -pne "s/\n/,/g"| sed "s/,$//g"
выход
2020-01-01,Transaction Description,Initiator,$00.00
метод3
#!/usr/bin/python
import re
p=re.compile(r'T.*')
k=open('p.txt','r')
for i in k:
l=i.split(",")
z=re.sub(p,"",l[0])
rt=",".join(l[1:])
er=",{0}".format(rt)
print z+er,
выход
2020-01-01,Transaction Description,Initiator,$00.00