将包含相同单词的所有文件合并到一个新的文本文件中,并在各个文件之间留下新行



这是我在这里的第一个问题。我有一个名为";材料";,其中有40个文本文件;碳";(大写和小写形式(合并到一个文件中,并在它们之间留下换行符。我用了";grep-w碳*";以识别包含单词carbon的文件。我只是不知道在这一点之后该怎么办。我真的很感谢你的帮助!

grep -il carbon materials/*txt | while read line; do 
echo ">> Adding $line";
cat $line >> result.out; 
echo >> result.out; 
done

解释

  • grep搜索文件中的字符串-我忽略搜索字符串的大小写-l打印包含字符串的文件名
  • while命令在包含字符串的文件上循环
  • 猫与>gt;附加到结果。out
  • echo>gt;在将每个文件的内容附加到结果后添加新行。out

执行

$ ls -1 materials/*.txt
materials/1.txt
materials/2.txt
materials/3.txt
$ grep -i carbon materials/*.txt
materials/1.txt:carbon
materials/2.txt:CARBON
$ grep -irl carbon materials/*txt | while read line; do      echo ">> Adding $line";     cat $line >> result.out;      echo >> result.out;  done
>> Adding materials/1.txt
>> Adding materials/2.txt
$ cat result.out
carbon
CARBON

试试这个(假设文件名不包含换行符(:

grep -iwl carbon ./* |
while IFS= read -r f; do cat "$f"; echo; done > /tmp/combined

如果文件名可能包含换行符,并且shell是bash,则:

grep -iwlZ carbon ./* |
while IFS= read -r -d '' f; do cat "$f"; echo; done > /tmp/combined

grep被假定为GNUgrep(对于-w-Z选项(。请注意,这将在文件/tmp/combined中留下一个尾随换行符。

最新更新