![행에서 날짜를 선택하고 현재 날짜와 비교하여 선택한 행과 다른 필드를 인쇄합니다.](https://linux55.com/image/178016/%ED%96%89%EC%97%90%EC%84%9C%20%EB%82%A0%EC%A7%9C%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EA%B3%A0%20%ED%98%84%EC%9E%AC%20%EB%82%A0%EC%A7%9C%EC%99%80%20%EB%B9%84%EA%B5%90%ED%95%98%EC%97%AC%20%EC%84%A0%ED%83%9D%ED%95%9C%20%ED%96%89%EA%B3%BC%20%EB%8B%A4%EB%A5%B8%20%ED%95%84%EB%93%9C%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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 ]