bash text search: find if the content of one file exists in another file [closed]

匿名 (未验证) 提交于 2019-12-03 01:20:02

问题:

Say we have two files: a.txt and b.txt. Each file has multiple lines of text.

How do I write a shell script to check if all of the content of a.txt exists in b.txt?


Thx for the hints guys, i didn't noticed -q will output 0 if successfully matched.

I end up with:

if grep a.txt -q -f b.txt ; then

else

fi

回答1:

try grep

cat b.txt|grep -f a.txt 


回答2:

Here is a script that will do what what you are describing:

run: sh SCRIPT.sh a.txt b.txt

# USAGE:   sh SCRIPT.sh TEST_FILE CHECK_FILE TEST_FILE=$1 CHECK_FILE=$2  ## for each line in TEST_FILE while read line ; do      ## check if line exist in CHECK_FILE; then assign result to variable     X=$(grep "^${line}$" ${CHECK_FILE})       ## if variable is blank (meaning TEST_FILE line not found in CHECK_FILE)     ## print 'false' and exit     if [[ -z $X ]] ; then         echo "false"         exit     fi  done < ${TEST_FILE}  ## if script does not exit after going through each line in TEST_FILE, ## then script will print true echo "true" 

Assumptions:

  • line order from a.txt does not matter


回答3:

You need to write a loop that iterates over each line in a.txt and use grep (or some other means) to see if that line is in b.txt. If you find any instance where it is not in b.txt, then you can provide the answer: not all lines match. If you find no such instances, you can conclude that all lines match.

Capturing the output of grep using backticks would likely be useful:

if [`grep -v $line b.txt`==  ""]; then 

kind of thing.

If you have specific questions about how to iterate over the contents of a file, you should ask a specific question about that, showing what you tried.



回答4:

Using grep

grep -f a.txt b.txt 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!