if-then
현재 날짜와 비교되는 행에서 날짜를 가져오는 명령이 있고 명령문의 동일한 행에서 다른 필드를 인쇄 하고 싶습니다 .
cat /tmp/OutPrint |cut -d' ' -f 2 | while IFS= read line; do
now=$(date | cut -d' ' -f 4)
time_now=$(date -u -d "$now" +"%s") #seconds
time_line=$(date -u -d "$line" +"%s") #seconds
difference=$(echo $((time_now - time_line)))
if [ $difference -ge 2592000 ]
then
echo "Time difference is greater than 30 days"
else
echo "Time difference is less than 30 days"
fi
done
아래는 내 파일의 내용이며 파일의 날짜를 현재 날짜와 비교하고 있습니다. 차이가 30일 이상인 경우 then
보고서의 첫 번째 필드를 인쇄해야 합니다.
then
보고서의 첫 번째 필드를 인쇄하는 방법은 무엇입니까 ?
입력하다:
anhtdg5 03-Jul-2019
kjushr7 04-Aug-2020
bhyusj3 09-Mar-2017
losyej9 09-Mar-2017
nhtgsy57 09-Mar-2017
bpolise3 09-Mar-2017
uioshye2 14-Mar-2018
zsethfyu 23-Nov-2018
cnhysge 23-Mar-2018
답변1
첫 번째 필드를 사용하고 싶지만 cut
에 보내기 전에 닫으십시오 while
.
read
다음을 사용하여 단순히 필드를 분리 하면 어떨까요 ?
while read name date; do
...
time_line=$(date -u -d "$date" +"%s")
...
echo "$name"
done < /tmp/OutPrint
스크립트에는 어떻게든 작동하지만 더 나은 방법으로 작성할 수 있는 몇 가지 추가 복잡한 기호가 있습니다.
쓸모없는 사용
cat
.중간 변수를 직접 사용하는 대신
$now
사용하기 위해 저장하는 이유:date
date
time_now=$(date -u +"%s")
echo
명령의 출력을 변수에 저장하는 것을 쓸모 없게 사용합니다 .difference=$((time_now - time_line))
변수에 저장하는 대신 if 문에서 직접 사용할 수도 있습니다.
if [ $((time_now - time_line)) -ge 2592000 ]