2015-03-09 3 views
0

Мне нужно заменить имя файла в файле на строку, которая является командой cp, и, следовательно, она должна заменить существующее имя файла исходным пунктом источника в одном файле. Файл разделяется запятой # мин образец файлаиспользовать awk или sed для замены строки динамически в файле

ABC,TS-R:56:UT-123,/apps/home/t.txt 
ICA,Y6734YGSU,/apps/home/t2.txt 
MDI,UI-HDGD-PO567,/apps/home/t3.txt 

Теперь я хочу или AWK патч в команду, которая может заменить /apps/home/<filename>.txt на cp /apps/home/<filename>.txt /apps/cmb/<filename>.txt

так после СЭД/AWK же файл должен иметь содержание

ABC,TS-R:56:UT-123,cp /apps/home/t.txt /apps/cmb/t.txt 
ICA,Y6734YGSU,cp /apps/home/t2.txt /apps/cmb/t2.txt 
MDI,UI-HDGD-PO567,cp /apps/home/t3.txt /apps/cmb/t3.txt 

Я пробовал awk -F, '{$3="cp "$3" "$3""}1' OFS=, test.txt, но его просто печатал ABC,TS-R:56:UT-123,cp /apps/home/t.txt /apps/home/t.txt также в консоли и не менялся в файле.

Заранее спасибо.

ответ

0

Это должно сделать:

awk -F/ '{print $1"cp ",$2,$3,$4 " ",$2,"cmb",$4}' OFS=/ file 
ABC,TS-R:56:UT-123,cp /apps/home/t.txt /apps/cmb/t.txt 
ICA,Y6734YGSU,cp /apps/home/t2.txt /apps/cmb/t2.txt 
MDI,UI-HDGD-PO567,cp /apps/home/t3.txt /apps/cmb/t3.txt 
+0

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

+0

@innova Чтобы записать его обратно в файл: 'awk -F/'{print $ 1" cp ", $ 2, $ 3, $ 4" ", $ 2," cmb ", $ 4}' OFS =/file> tmp && mv tmp file' – Jotne

+0

спасибо, теперь он пишет в файл. – innova

0

Вы можете использовать AWK:

awk -F, -v OFS=, '{p=$NF; sub(/\/home\//, "/cmb/", $NF); 
    $NF=sprintf("cp %s %s", p, $NF)} 1' file 
ABC,TS-R:56:UT-123,cp /apps/home/t.txt /apps/cmb/t.txt 
ICA,Y6734YGSU,cp /apps/home/t2.txt /apps/cmb/t2.txt 
MDI,UI-HDGD-PO567,cp /apps/home/t3.txt /apps/cmb/t3.txt 
+0

Спасибо, твои тоже работают, я просто положил «/ home/cmb», и это было прекрасно – innova

0

Поскольку это простые замены на отдельных линиях, было бы подходящим для работы СЭД:

$ sed -r 's:(/[^/]+/)([^/]+)(/[^/]+):cp & \1cmb\3:' file 
ABC,TS-R:56:UT-123,cp /apps/home/t.txt /apps/cmb/t.txt 
ICA,Y6734YGSU,cp /apps/home/t2.txt /apps/cmb/t2.txt 
MDI,UI-HDGD-PO567,cp /apps/home/t3.txt /apps/cmb/t3.txt 
Смежные вопросы