2012-05-07 3 views
3

Новинка в Linux и попытка избежать этого сложным способом. У меня есть файл («output.txt»), который содержит результаты команды «Найти». Пример первые три строки из «output.txt»:Извлеките определенные строки из строки в файл и выведите их в другой файл с изменениями

/home/user/temp/LT50150292009260GNC01/L5015029_02920090917_MTL.txt 
/home/user/temp/LT50150292009276GNC01/L5015029_02920091003_MTL.txt 
/home/user/temp/LT50150292009292GNC01/L5015029_02920091019_MTL.txt 

Я хотел бы использовать AWK или СЭД (или аналогичный), чтобы извлечь из двух частей из пути, перечисленных для каждой строки, и выход в новый файл («run.txt») с дополнительной информацией добавляется на каждой строке, например так:

cd /home/user/temp/LT50150292009260GNC01; $RUNLD L5015029_02920090917_MTL.txt 
cd /home/user/temp/LT50150292009276GNC01; $RUNLD L5015029_02920091003_MTL.txt 
cd /home/user/temp/LT50150292009292GNC01; $RUNLD L5015029_02920091019_MTL.txt 

Я предполагаю, что это также может включать в себя что-то вроде «вырезать», но я не могу получить мою голову обернутые вокруг, как учитывать для изменения имен папок и файлов.

Любая помощь будет высоко оценена.

ответ

0
sed 's|^|cd |; s|/\([^/]*\)$|; $RUNLD \1|' inputfile > run 

Он говорит:

  • вставка "CD" в начале строки
  • за последний слэш и что происходит после того, как, заменить «; $ RUNLD "и заключительная часть (захвачен скобках)
+0

Наиболее полный ответ, хотя Jens был близок второй – Prophet60091

0

Я бы, вероятно, поступил по этому пути с помощью grep-решения, основанного на петле, поскольку я не знаю cut, или awk очень хорошо ха-ха. Это делает трюк:

while read x; do folder=$(echo "$x" | grep -o '^.*/'); file=$(echo "$x" | grep -o '[^/]*$'); echo "cd ${folder:0:-1}; \$RUNLD $file"; done <output.txt> run 
1
sed -e 's/^/cd /; s|/\([^/]*\)$|; \$RUNLD \1|' file 

Это добавляет «cd» и заменяет последний/на «; $ RUNLD»Voila

+0

Спасибо, Дженс! Он определенно работал как рекламируемый, хотя и не такой полный, как ответ Денниса Уильямсона. – Prophet60091

+0

Ничего страшного. Деннис был на секунду быстрее :-) Upvot но и оценили. – Jens

0

Это может работать для вас:.!.

sed 's/\(.*\)\//cd \1; $RUNLD /' file 
cd /home/user/temp/LT50150292009260GNC01; $RUNLD L5015029_02920090917_MTL.txt 
cd /home/user/temp/LT50150292009276GNC01; $RUNLD L5015029_02920091003_MTL.txt 
cd /home/user/temp/LT50150292009292GNC01; $RUNLD L5015029_02920091019_MTL.txt