나는 다음 게시물을 읽었습니다. bash - 공백을 새 줄로 바꿉니다., 하지만 이것은 내 문제를 해결하는 데 도움이 되지 않습니다.
[My Directory]
[root@testlabs Config]# ls
Archive Backup_Files
config_file.tgz
hostname1-config.uac
hostname2-config.uac
hostname3-config.uac
My-config_17Oct2014.tgz
non_extension-config_file1
non_extension-config_file2
[root@testlabs Config]#
파일의 MD5 체크섬 결과 목록을 에코해야 합니다. 다음을 수행하여 이 작업을 수행할 수 있습니다.
##IDENTIFY MD5 CHECKSUM##
//To output the md5sum of the original file with a correct format to a temp file [md5<space><space>file_name]
ls $FULL_FILE_NAME | md5sum $FULL_FILE_NAME > /tmp/md5sum.tmp
//To compare the md5sum of the orignal file with the md5sum of the backup copies in the archive directory
ls $CONFIG_ARCHIVE_DIR | grep -i --text $CONFIG_FILE_HOSTNAME-$FILE_TIMESTAMP.tgz | md5sum -c /tmp/md5sum.tmp >> /tmp/md5sum2.tmp
##COMPARING MD5 CHECKSUM##
if [ -s /tmp/md5sum2.tmp ];
then
echo ""
echo "Comparison of MD5 for files archived:"
echo '---------------------------------------'
/bin/sort -d /tmp/md5sum2.tmp
fi
실행 시 결과는 다음과 같습니다. (/tmp/md5sum2.tmp의 내용을 에코합니다.)
Comparison of MD5 for files archived:
---------------------------------------
config_file.tgz: OK
hostname1-config.uac: OK
hostname2-config.uac: OK
hostname3-config.uac: OK
My-config_17Oct2014.tgz: OK
non_extension-config_file1: OK
non_extension-config_file1: OK
##구함##
하지만 결과를 다음과 같이 표시하고 싶습니다.
Comparison of MD5 for files archived:
---------------------------------------
- config_file.tgz: OK
- hostname1-config.uac: OK
- hostname2-config.uac: OK
- hostname3-config.uac: OK
- My-config_17Oct2014.tgz: OK
- non_extension-config_file1: OK
- non_extension-config_file2: OK
나는 이것을 시도했습니다. (/tmp/md5sum2.tmp의 내용을 /tmp/md5sum3.tmp에 에코하고 앞에 "-"가 붙습니다)
1)
##COMPARING MD5 CHECKSUM##
if [ -s /tmp/md5sum2.tmp ];
then
echo ""
echo "Comparison of MD5 for files archived:"
echo '---------------------------------------'
/bin/sort -d /tmp/md5sum2.tmp
for CONFIG_FILES in `/bin/cat /tmp/md5sum2.tmp`
do
/bin/sort -d /tmp/md5sum2.tmp | grep $CONFIG_FILES > /tmp/md5sum3.tmp
done
for MD5_COMPARE in $(/bin/sort -d /tmp/md5sum3.tmp)
do
echo -e " - $MD5_COMPARE\n"
done
fi
결과 1)
Comparison of MD5 for files archived:
---------------------------------------
- config_file.tgz:
- OK
- hostname1-config.uac:
- OK
- hostname2-config.uac:
- OK
- hostname3-config.uac:
- OK
- My-config_17Oct2014.tgz.tgz:
- OK
- non_extension-config_file1:
- OK
- non_extension-config_file2:
- OK
2)
for MD5_COMPARE in $(/bin/sort -d /tmp/md5sum3.tmp)
do
echo -n " - $MD5_COMPARE"
done
결과 2)
Comparison of MD5 for files archived:
---------------------------------------
- config_file.tgz: - OK - hostname1-config.uac: - OK - hostname2-config.uac: - OK -
hostname3-config.uac: - OK - My-config_17Oct2014.tgz: - OK - non_extension-config_file1: -
OK - non_extension-config_file2: - OK
답변1
파일을 한 줄씩 읽는 표준 절차는 다음과 같습니다.
while IFS= read -r MD5_COMPARE
do
echo "- $MD5_COMPARE"
done < /tmp/md5sum2.tmp | /bin/sort -d
하지만 sed
그것도 작동해야합니다
/bin/sort -d /tmp/md5sum2.tmp | sed 's/^/ -/'
답변2
출력을 에서 다음으로 파이프 sort
하면 sed
됩니다 -
.
if [ -s /tmp/md5sum2.tmp ];
then
echo ""
echo "Comparison of MD5 for files archived:"
echo '---------------------------------------'
/bin/sort -d /tmp/md5sum2.tmp | sed 's/\(^ *\) \( [^ ]\)/\1-\2/'
fi
결과:
Comparison of MD5 for files archived:
---------------------------------------
- My-config_17Oct2014.tgz: OK
- config_file.tgz: OK
- hostname1-config.uac: OK
- hostname2-config.uac: OK
- hostname3-config.uac: OK
- non_extension-config_file1: OK
- non_extension-config_file1: OK