Версия awk (GNU)
awk '{printf ("%s ||| ", $0); getline < "fileB"; print $0 }' fileA
С помощью команды getline
в awk
можно установить $0
(все переменные для столбцов) из следующей записи ввода, если getline , то устанавливается следующий
$0
из указанного файла.
getline
Почему ваша попытка не сработала так, как вы ожидали? Из man paste
мы можем прочитать
-d, --delimiters=LIST
reuse characters from LIST instead of TABs
но он использует разделители по одному для каждого столбца.
Поэтому командаpaste -d '|*|*' fileA fileB fileA fileB
дает мне строки
Hi 1,3 I am hungry.|Hi 1,3 Ich habe Durst.*Hi 1,3 I am hungry.|Hi 1,3 Ich...
Hi 1,4 I am foolish.|Hi 1,4 Ich bin neu.*Hi 1,4 I am foolish.|Hi 1,4 Ich...
Решение sed
, которого я советую избегать, даже если оно близко к вашей первоначальной попытке, потому что оно подменяет полученное поведение вашей первоначальной целью:
paste -d '|' fileA fileB | sed 's/|/|||/g'
избегать, потому что вы заменяете каждый шаблон |
на новый ||||
, но вы должны предположить, что символ трубы (|
) не присутствует в ваших данных, иначе вам придется иметь дело с особыми случаями и усложнять код, чтобы избежать побочных эффектов.
Вариант с конструкцией Here String [1]
paste -d ' ||| ' fileA - - - - fileB <<< ''
Вы устанавливаете 5 разделителей с помощью -d ' ||| '
(пробел, |,|,|,|,пробел) и 4 фиктивных файла (- - - - -
), которые будут брать данные из пустой строки '''
.
Проверено на GNU Awk 4.0.1, paste (GNU coreutils) 8.21 и sed (GNU sed) 4.2.2
С помощью sed способ реализации не--жадного сопоставления состоит в том, чтобы указать набор символов, которого вы не хотите сопоставлять:
sed -i 's/=ABC[^_]*_/=XYZ12_/g' INCR.parm
То есть :соответствует «ABC», за которым следует ноль или более не -символов подчеркивания, за которыми следует подчеркивание.
И заметьте, вы не избегаете точки. «Голая» точка означает «соответствует любому символу»; экранированная точка означает «соответствовать буквальной точке». Вы не делали никаких замен, потому что ни одно из данных не соответствует буквальной строке "ABC".