awk 解决方案

awk 解决方案

第二天,我试图找到解决方案。
有一个 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 )
  }
}

相关内容