フォルダには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.txt
とlberry.txt
はberry.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.txt
ttea.txt
tluck.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}
。