スクリプト - パラメータに基づいてテキストファイルのレコードと一致するファイルを移動します。

スクリプト - パラメータに基づいてテキストファイルのレコードと一致するファイルを移動します。

私が達成したいことは2つのパラメータに基づいて、テキストファイルのレコードと一致するディレクトリ内のファイルを移動します。

たとえば、テキストファイルには次の履歴があります。

SPPARK|10416|3308123|3308123|Uphold|Thelma|1930/05/20||

私のディレクトリには、次の内容のファイルがあります。

1123_M1123_UPHOLD_M1123_MESSAGE_SPPARK_348642.pdf

したがって、パフォーマンスのUPHOLD4番目のフィールドがM1123私のテキストファイルのフィールドと一致する場合は、そのフィールドを指定されたディレクトリに移動したいと思います。

for files in test/* ; do
 echo $files | awk -F "_" '{print $3,$4}'
done

答え1

この試み。テスト後、「echo」コマンドをcpまたはmvに変更します。

for f in samples.txt ; do 
  echo /source/path/*$(cut -d '|' -f 5,2 $f | tr '|'a-z '_'A-Z)*.pdf /destination/path
done

すみません、私の間違いです。 @Kusalananda ありがとうございます。上記の回答が間違っていると思って、この回答を試してください。 /srcから/dstにファイルをコピーする列5と4をフィルタリングするとします。

awk -F "|" '{system("cp /src/*"toupper($5)"_"$4"*.pdf /dst")}' samples.txt

答え2

私はこれに反対方向に近づきます:

  • テキストファイルを1行ずつ読み、フィールドに分割
  • そのファイルを一致させて移動します。

EG(家庭bashとGNU mv):

#!/bin/bash

shopt -s nullglob

while IFS='|' read -r loc a b c last first d e; do 
  echo mv --no-clobber -t path/to/target/ -- *_"$a"_"${last^^}"_*_*_*_*.pdf
done < file.txt

echo必要に応じて機能しているという事実に満足している場合は、削除してください。

関連情報