第二天,我试图找到解决方案。
有一个 CCC 目录;我们包含编号为 1 2 3 ... 500 的子目录,每个子目录中都有一个名为 A1 的文件,其中包含一个单词(示例)苹果香蕉梨菠萝
$ CCC /
/1/A1.txt pear
/2/A1.txt apple
/3/A1.txt banana
/4/A1.txt pineapple
flash BBB 目录包含ALLIN.txt
含有以下行的文件:
pear is a very sweet fruit
potatoes are very high in calories
pineapple number 1 for weight loss
raspberries tasty and healthy
everyone likes strawberries !!!
所以我的问题是:
如何从 BBB 文件中查找并替换 CCC 文件中第一个单词的出现,以便
CONCLUSION
$ CCC /
/1/A1.txt pear a very sweet fruit
/4/A1.txt Pineapple No. 1 lose weight
和文件
/ 2
/ 3
delete
我曾尝试过:
for i in `find ./ -depth -type d ! -wholename './'`
do
join -j1 -o <${i}(sort A1.txt) <${i}(sort BBB.txt)
done
和
for i in `find ./ -depth -type d ! -wholename './'`
do
awk 'NR==FNR{a[$0];next} ($0 in a)' A1.txt BBB.txt
perl -lane '$t+=1; $h{$F[0]}=$F[1] if $.==$t; print $F[0]," ",$h{$F[0]} if $t!=$.;$.=0 if eof' $(find -name '*A1.txt') BBB.txt
我仍在学习 Linux,所以请善待我。
答案1
awk 解决方案
对每个文件使用此命令:
awk -f 2fileMatch.awk BBB/ALLIN.txt someFileNames
其中someFileNames
是一个或多个文件的列表。
awk 脚本
FNR == NR {
replacements[$1] = $0
next
}
{
if ( replacements[$1] != "" ) {
sub( $1, replacements[$1] )
print > FILENAME
} else {
system( "rm " FILENAME )
}
}