在一个文件夹中collection
,我有以下文件:
fberry.txt lberry.txt
fgag.txt lgag.txt
fred.txt lred.txt
ftea.txt ltea.txt
fluck.txt lluck.txt
我们可以发现这些文件可以分为两种:一种以 开头f
,另一种以l
.并且每两个文件共享相同的名称(除了第一个字母),例如: Infberry.txt
和lberry.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.txt
、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}
.