с помощью sed для нахождения сравните и замените текст

У меня есть текст в единственном файле

Тест

Worker(Thomas) works in .......... 
Worker(Alfred) works in .......... 
Worker(Albert) works in .......... 

Ответ

Worker(Thomas) works for company(google) 
Worker(Alfred) works for company(apple)
Worker(Albert) works for company(Microsoft)

Я хочу заменить пустые пунктирные линии в "Тесте" от информации, данной в "Ответе" при помощи базирующегося текстового поиска sed, соответствия и замены.

1
задан 1 February 2020 в 19:16

1 ответ

Я предлагаю использовать awk для этой задачи. Принятие Вас имеет два отдельных файла Quiz и Answerв том же каталоге, cd в тот каталог и выполненный следующая команда в терминале:

awk 'NR==FNR{a[$1]=$4; next}{$4=a[$1]; print}' > Answered_Quiz Answer Quiz

Называют новый файл Answered_Quiz будет создан в том же каталоге, и он будет содержать желаемый результат.

Если все строки находятся в одном файле, можно разделить его сначала:

выполните следующую замену команды FileName с Вашим именем текстового файла:

awk '$4 ~ /(^[\.]+$)/' > Quiz FileName 

сделать файл Теста.

затем выполните следующую замену команды FileName с Вашим именем текстового файла:

awk '$4 !~ /(^[\.]+$)/' > Answer FileName

получить файл Ответа. Ваш исходный файл не будет затронут


Или если все строки находятся в одном файле, и Вы предпочитаете не разделять файл, использовать следующий код в файле сценария (или можно просто скопировать и вставить его в терминале и нажать Enter) из того же каталога:

#!/bin/bash

pat1="(^[\.]+$)"


while read f1 f2 f3 f4 f5
                do

                        if [[ "$f4" =~ $pat1 ]]

                        then
                        # change Quiz in the following line with your source file name
                        a4=$(awk -v ff1="$f1" '$4 !~ /(^[\.]+$)/ && $1 == ff1 {print $4}' "Quiz")

                        echo "$f1 $f2 $f3 $a4" >> "Answered_Quiz" 
                        fi
                # change Quiz in the following line with your source file name
                done < "Quiz"

Новый файл по имени Answered_Quiz будет создан в том же каталоге, и он будет содержать желаемый результат.

Всего наилучшего

0
ответ дан 20 February 2020 в 23:03

Другие вопросы по тегам:

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