2014-09-01 2 views
1

Мои данные, содержащие grepped, имеют три столбца. Позиция первого столбца статична, а две другие - в случайном порядке. Детали x и y на приведенной ниже схеме различаются. Их длины постоянны. Я хочу передать данные и условно переключить части каждой строки, чтобы три столбца были одинаковыми для каждой строки.Условное изменение частей линии

Линии сейчас:

ADDED IDx UPDATEDy 
ADDED UPDATEDy IDx 
ADDED IDx UPDATEDy 
ADDED UPDATEDy IDx 
ADDED UPDATEDy IDx 
ADDED IDx UPDATEDy 

Что мне нужно:

ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 

Я пытался написать SED выражение, которое, если строка содержит "ДОБАВЛЕНО ОБНОВЛЕНО", переключает «UPDATEDy «с« IDx », копируя подстроки между разными индексами, но без везения. Я даже не уверен, что это возможно без временного хранения замененной части, чтобы впоследствии можно было заменить последнюю часть, чтобы части были переключены.

Заранее благодарен!

ответ

2

Просто используйте AWK:

awk '/ADDED UPDATED/{ t=$3; $3=$2; $2=t } 1' file 

Вы могли бы почти наверняка избавиться от предыдущей Grep тоже, как AWK может сделать что-нибудь полезное, что Grep сможет сделать.

+1

Большое спасибо, это то, что я в конечном итоге использовал. – Johe

1

Попробуйте это:

sed 's/ADDED\(\+UPDATED[^ ]\+\)\(\+ID[^ ]\+\)/ADDED\2\1/' file.txt 

регулярное выражение для поиска строк, в которых ОБНОВЛЕНО предстает перед ID и захватывает как UPDATEDx, а также часть IdY. В этих случаях две захваченные группы просто обмениваются (это то, что делает \2\1).
Установите переключатель -i на номер sed, чтобы выполнить замену на месте.

+0

Спасибо. К сожалению, я не получил этого, чтобы работать. Я попытался применить его в разных строках примера несколькими способами, но столбцы не переключились. – Johe

1

Вы можете использовать эту GNU SED команды также,

sed -r '/ADDED/s/(+UPDATED\S+)(+ID\S+)/\2\1/' file 
+0

Спасибо, но, к сожалению, я не получил этого, чтобы работать с моими столбцами. – Johe

Смежные вопросы