Как преобразовать текст в нижний регистр и игнорировать пробелы при временном использовании awk или grep? - PullRequest
0 голосов
/ 21 ноября 2018

В моем сценарии есть 2 команды:

awk -F'"(,")?' '
NR==FNR { r[$2] = $3; next }
{ for (n in r) gsub(n, r[n]) } 1' file2.csv file1.csv>xyzabc.csv

и

grep -v -f file3.txt xyzabc.csv>output.csv

, поэтому в основном эти команды сравнивают файлы для получения желаемого результата.Мой вопрос заключается в том, что при сравнении я хочу, чтобы сравнение проводилось в нижнем регистре и без пробелов, а также удаление пробелов и преобразование в нижний регистр должно быть временным, то есть исходный текст должен быть напечатан в выходном файле.например:

file1:         file 2.csv:
I AM A MAN     I am a man
I Like DoGs    i like DOGS
I like cats    I    like cats

, поэтому при использовании команд, упомянутых выше, эти строки не равны.Я пытаюсь использовать tr 'AZ' 'az' и tr -d [: space:] для выполнения работы, однако я борюсь с синтаксисом.Также после того, как сравнение сделано, я хочу напечатать его точно так, как указано в file2.csv, так что это преобразование в строчные буквы и удаление пробелов должно быть временным.Спасибо

edit: я прошу прощения за то, что не очень ясно с моими образцами.

, поэтому file1 содержит следующие данные:

file1.csv:
I am a man
I like dogs
I am a doctor
I like cats
I drink coffee

и file2.csv содержит следующие данные:

file2.csv:
I am a man,man
I like dogs,dogs
I drink coffee,I drink tea

Я использую мою команду awk для этих двух файлов, поэтому она проверяет, присутствуют ли предложения, присутствующие в первом столбце file2.csv, в file1.csv и заменяет их насодержимое во втором столбце файла file2.csv и помещает вывод в другой файл.поэтому при выполнении поиска я хочу, чтобы он был без учета регистра и без пробелов, поскольку file2.csv может содержать несколько пробелов между словами или регистр может отличаться.Кроме того, после получения вывода я не хочу, чтобы содержимое файла1 и файла2 было изменено.

Что касается команды grep, то это простая команда поиска и удаления, которая ищет одинаковые строки в обоих файлах.и удаляет их.Я хочу, чтобы это тоже сравнивалось без пробелов, так как между словами в файлах может быть несколько пробелов.

1 Ответ

0 голосов
/ 21 ноября 2018
awk '
    function asKey(str, tmp) {
        tmp = tolower(str)
        gsub(/[[:blank:]]+/, " ", tmp)
        return tmp
    }
    NR==FNR {f2[asKey($0)]; next}
    asKey($0) in f2
' file2 file1

Учитывая ваши примеры файлов, это возвращает все строки в файле 1.

Я заметил, не разрушает пробелы с этим регулярным выражением.Вы можете заменить /[[:blank:]]+/ на /[ \t\r]+/

...