一連のペアリングされたファイルを処理する方法

一連のペアリングされたファイルを処理する方法

フォルダにはcollection次のファイルがあります。

fberry.txt   lberry.txt
fgag.txt     lgag.txt
fred.txt     lred.txt
ftea.txt     ltea.txt
fluck.txt    lluck.txt

これらのファイルは2つのタイプに分けられます。 1つはで始まりf、もう1つはで始まりますl。そして、両方のファイルは同じ名前を共有します(最初の文字を除く)。例: Infberry.txtlberry.txtberry.txt同じです。この2組のファイルでは、各ファイルの最初の列は同じで、同じ列にlberry.txt基づいて2つのファイル(最初の2つの列と3番目の列)をマージしたいと思います。fberry.txt

次のコードを使用します。

cd ~/collection
awk 'NR==FNR {h[$1]=$3; next} {print $1,$2,h[$1]}' fberry.txt lberry.txt > tberry.txt

私が望む結果は出てきますが、これらすべてのファイルペアを一緒に処理する方法がわかりません。そうでなければ、このように5つのコードを書く必要があり、ファイルが100以上であれば災害になります。

tberry.txt私の予想される結果は、5つの新しいファイル(、および)tgag.txtを取得することです。ありがとうございます。tred.txtttea.txttluck.txt

ベストアンサー1

for file in f*.txt
do name=${file:1}
awk 'NR==FNR {h[$1]=$3; next} {print $1,$2,h[$1]}' "$file" "l$name" > "t$name"
done

@don_crisstiに感謝します。ここでは、${file:1}最初の文字以降の文字を抽出できます。これにより、ペアのファイル名の共通部分を簡単に取得できます。構文${file:1}はです${string: index: length}

おすすめ記事