Linux的新手,试图以艰难的方式逃避这种做法。我有一个文件(“output.txt”),其中包含'find'命令的结果。示例来自“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或sed(或类似的)从每行所列的路径中提取两个部分,并输出到一个新文件(“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 :(得分:1)
sed -e 's/^/cd /; s|/\([^/]*\)$|; \$RUNLD \1|' file
这前缀为“cd”并用“; $ RUNLD”替换最后一个/。瞧!
答案 1 :(得分:1)
只是使用bash
while IFS= read -r filename; do
printf 'cd %s; $RUNLD %s\n' "${filename%/*}" "${filename##*/}"
done < output.txt > run
请参阅http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
答案 2 :(得分: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
答案 3 :(得分:0)
sed 's|^|cd |; s|/\([^/]*\)$|; $RUNLD \1|' inputfile > run
它说:
答案 4 :(得分: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