Вычитание одной текстовой строки от другой уезжающие уникальные символы, возможно, использование awk

Я говорю об энергии, это не будет работать в vi. Знайте об этом.

Что относительно

    :%v/^[^0-9]/d

удалить все строки в буфере, которые запускаются с числа.

    ggVG

выделить все строки

    :w ! paste -d ' ' -s

и после этого

    u

вернуться к начальной точке

3
12.06.2012, 21:21
2 ответа

Да, awk подходящий выбор:

awk 'NF{t=$1;gsub("["$2"]","",t);print$0,t}' input

В случае, если второе поле может содержать символы с особым значением в классах символов регулярного выражения, их нужно оставить. Решение этого в POSIX awk длинно, таким образом, я отправляю GNU awk альтернатива только:

gawk 'NF{print$0,gensub("["gensub(/([\[\]^-])/,"\\\\\\1","g",$2)"]","","g",$1)}' input
5
27.01.2020, 21:14
  • 1
    Большой то, что работы хорошо, однако для меня это принимает во внимание положение в первом столбце так, чтобы был вывод, только если символ отличается в первом положении (положение левой руки) в столбце 1....., является мной делающий что-то не так?? –  alex 12.06.2012, 17:17
  • 2
    да моя ошибка............. работает теперь!!! Большое спасибо. –  alex 12.06.2012, 17:22

Решение Manatworks прекрасно, конечно. Это - просто чистая альтернатива удара.

while read line
do
  in=${line/ */}
  pat=${line/* /}
  echo $line ${in/$pat}
done < aba.dat

ab a b
cd d c
efg ef g
  • В in замена (/) от $line, что такое пробел, сопровождаемый чем-то - не в regex, но стиле globbing.
  • В pat это - противоположное: удалите то, что перед пробелом. Удаление, потому что сменная деталь $ {src/pattern/replacement} является пробелом.
  • $ {в / $pat} замены pat в in ни с чем. Стандартный var должен быть отмечен как переменная $ в отличие от первой переменной/части (в).
1
27.01.2020, 21:14
  • 1
    Если Вы не заботитесь о сохранении количества пробела между существующими столбцами: while read -r in pat; do echo "$in $pat ${in/$pat}"; done –  Gilles 'SO- stop being evil' 13.06.2012, 01:28

Теги

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