如何处理一系列配对文件

如何处理一系列配对文件

在一个文件夹中collection,我有以下文件:

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

我们可以发现这些文件可以分为两种:一种以 开头f,另一种以l.并且每两个文件共享相同的名称(除了第一个字母),例如: Infberry.txtlberry.txt,berry.txt是相同的。在这两个配对文件中,每个文件的第一列是相同的,我想基于同一列合并这两个文件( 的前两列lberry.txt和第三列)。fberry.txt

我使用以下代码:

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

它可以产生我想要的结果,但我不知道如何将所有这些成对的文件一起处理,否则,我需要编写5个这样的代码,如果有100+个文件,那将是一场灾难。

我的预期结果是得到 5 个新文件:tberry.txttgag.txttred.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}.

相关内容