AIX에서 두 파일을 비교하여 수치 차이를 인쇄하고 싶습니다.

AIX에서 두 파일을 비교하여 수치 차이를 인쇄하고 싶습니다.

file1과 이라는 2개의 파일을 비교하고 싶습니다 file2. 출력에서 ​​차이점과 추가 및/또는 제거된 줄 수를 인쇄해야 합니다.

파일 1

apple1
apple2
apple3
apple4

파일 2

apple1
apple2
apple3
apple4
grape1
grape2
grape3
mango4

출력은 다음과 같아야 합니다.

No of newly added list= 4
No of lines removed =0
Difference =4 

Newely Added list 
------------

grape1
grape2
grape3
mango4

Removed list 
--------
None

답변1

정확한 출력 형식이 필요하지 않은 diff경우 diffstat.

예를 들어

$ diff file1 file2 | diffstat -s
 1 file changed, 4 insertions(+)

예를 들어 apple4에서 삭제 하면 file2출력은 다음과 같습니다.

$ diff file1 file2 | diffstat -s
 1 file changed, 4 insertions(+), 1 deletion(-)

정확한 출력이 정말로 필요한 경우 diff다음과 같이 스크립트에서 별도로 사용할 수 있습니다.

#! /bin/sh

if [ ! "$#" -eq 2 ] ; then
  echo "Exactly two file arguments are required."
  exit 1
fi

f1="$1"
f2="$2"    

# sort and uniq the input files before diffing.
# if you have `mktemp`, use this:
t1=$(mktemp)
t2=$(mktemp)
# else kludge it with something like this:
# mkdir ~/tmp
# t1="~/tmp/$f1.tmp"
# t2="~/tmp/$f2.tmp"

# if your `sort` has a `-u` option for `uniq` (e.g. GNU sort), you
# can use `sort -u` instead of `sort | uniq`
sort "$f1" | uniq > "$t1"
sort "$f2" | uniq > "$t2"

add=$(diff "$t1" "$t2" | grep -c '^> ')
del=$(diff "$t1" "$t2" | grep -c '^< ')

[ -z "$add" ] && add=0
[ -z "$del" ] && del=0

diff=$(( add - del ))

cat <<__EOF__
No of newly added list= $add
No of lines removed = $del
Difference = $diff

Newly Added list 
------------
__EOF__

if [ "$add" -eq 0 ] ; then
   echo None.
else
  diff "$t1" "$t2" | sed -n -e 's/^> //p'
fi

cat <<__EOF__

Removed list 
--------
__EOF__

if [ "$del" -eq 0 ] ; then
   echo None.
else
  diff "$t1" "$t2" | sed -n -e 's/^< //p'
fi

rm -f "$t1" "$t2"

옵션이 grep없으면 다음 을 사용하십시오.-cdiff ... | grep ... | wc -l

내장된 정수 산술 연산이 없으면 bc또는 dc또는 무언가를 사용하여 계산을 수행할 수 있습니다. sh나는 이것을 하지 않은 것을 기억하지 못하지만 상용 UNIX에는 공통 도구에 대한 매우 원시적이고 오래된 구현이 있을 수 있습니다. 이 스크립트는 테스트되었으므로 dash현재 POSIX 셸에서 작동해야 합니다.

산출:

$ ./keerthana.sh file1 file2
No of newly added list = 4
No of lines removed = 0
Difference = 4

Newly Added list 
------------
grape1
grape2
grape3
mango4

Removed list 
--------
None.

관련 정보