从文件行中提取特定字符串并输出到具有修改的另一个文件

时间:2012-05-07 18:59:41

标签: bash sed awk find cut

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

我猜这可能还会涉及“剪切”之类的内容,但我无法理解如何考虑更改文件夹和文件名。

非常感谢任何帮助。

5 个答案:

答案 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

它说:

  • 在行的开头插入“cd”
  • 为最后一个斜线和后面的内容,替换“; $ RUNLD”和最后一部分(由括号捕获)

答案 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