3

Linux が初めてで、これを難しい方法で回避しようとしています。「検索」コマンドの結果を含むファイル (「output.txt」) があります。「output.txt」の最初の 3 行の例:

/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 (または同様のもの) を使用して、各行にリストされているパスから 2 つの部分を抽出し、次のように各行に追加情報を追加して新しいファイル (「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

これには「カット」なども含まれると思いますが、フォルダー名とファイル名の変更をどのように説明するかについて頭を悩ませることはできません。

どんな助けでも大歓迎です。

4

5 に答える 5

1
sed -e 's/^/cd /; s|/\([^/]*\)$|; \$RUNLD \1|' file

これにより、「cd」が先頭に追加され、最後の / が「; $RUNLD」に置き換えられます。出来上がり!

于 2012-05-07T19:29:07.803 に答える
1

バッシュだけで

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を参照してください。

于 2012-05-07T19:45:08.497 に答える
0

わからないのでcut、おそらくループベースのgrepソリューションでこれを行うでしょう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
于 2012-05-07T19:13:04.807 に答える
0
sed 's|^|cd |; s|/\([^/]*\)$|; $RUNLD \1|' inputfile > run

それは言います:

  • 行頭に「cd」を挿入
  • 最後のスラッシュとその後に続くものについては、「; $RUNLD」と最後の部分 (括弧でキャプチャ) を置き換えます。
于 2012-05-07T19:28:21.073 に答える