Удалить специальные символы из указанного поля c - PullRequest
0 голосов
/ 18 марта 2020

У меня есть указанный ниже файл CSV на unix, и я хочу удалить все специальные символы и пробелы только из последнего поля (разделенные |), не могли бы вы помочь?

текущий вход:

16-DEC-16 11:42:50 AM|VV161216.1142.H21611|01234567891|9876543210|155|BILLPAYMENT C.UTIL

ожидаемый выход:

16-DEC-16 11:42:50 AM|VV161216.1142.H21611|01234567891|9876543210|155|BILLPAYMENTCUTIL

Ответы [ 3 ]

2 голосов
/ 18 марта 2020

Предполагая, что вы хотите удалить все символы, которые не являются прописными или строчными буквами или цифрами ([A-Za-z0-9]), из последнего поля каждой строки, которое вы можете использовать

awk -F '|' -v 'OFS=|' '{ gsub(/[^A-Za-z0-9]/,"",$NF); print}' inputfile > outputfile

Из строки ввода в вопрос, который создает именно запрошенную строку вывода.

2 голосов
/ 18 марта 2020

Предполагая, что вы хотите удалить не алфавитные символы c, вы можете использовать следующую команду awk:

awk 'BEGIN { FS=OFS="|" } { gsub("[^a-zA-Z0-9]+", "", $NF); print $0 }' inputFile
  • BEGIN { FS=OFS="|" } устанавливает ограничитель поля на | для output, а также input.
  • gsub("[^a-zA-Z0-9]+", "", $NF) заменяет все последовательности не-алфавитных символов c в последнем поле пустой строкой
  • print $0 выводит обновленную строку

Вы можете попробовать здесь .

Обратите внимание, что это зависит от отсутствия символа | в значениях полей, в то время как CSV позволит использовать его Символ разделителя экранирован или находится внутри значений в кавычках. Если вы находитесь в таком контексте, лучше использовать уже существующий синтаксический анализатор CSV.

0 голосов
/ 18 марта 2020

Это может работать для вас (GNU sed):

sed -E ':a;s/[^[:alnum:]|]([[:alnum:]]*)$/\1/;ta' file

Это работает в обратном направлении через каждую строку, удаляя любой символ, кроме a-z, A-Z, 0-9 или _ до достижения разделитель полей |, т.е. работает только с последним полем каждой строки.

Если последнее поле может содержать только буквенные символы верхнего регистра, используйте:

sed -E ':a;/s/[^A-Z|]([A-Z]*)$/\1/;ta' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...