awk 명령을 사용하여 날짜와 시간 사이의 공백을 무시하는 방법

awk 명령을 사용하여 날짜와 시간 사이의 공백을 무시하는 방법

파일 내용 내에서 타임스탬프를 변수로 인쇄하고 싶습니다. 데이터와 시간 사이의 공간을 무시하려면 awk 명령이 필요합니다. $2에 SECOND_VALUE로 인쇄할 값입니다.

전임자:

$ cat /var/tmp/file.txt
1#04-06-2019 03:06:17

암호:

list=`cat /var/tmp/${file}.txt`
for i in $list
do
  FIRST_VALUE=`echo $i|awk -F'#' '{print $1}'`
  SECOND_VALUE=`echo $i|awk -F '#' '{print $2}'`
done

산출:

++ cat /var/tmp/file.txt
+ list='1#04-06-2019 03:06:17'                                               '
+ for i in '$list'
++ echo 1#04-06-2019
++ awk -F# '{print $1}'
+ FIRST_VALUE=1
++ echo 1#04-06-2019
++ awk -F '#' '{print $2}'
+ SECOND_VALUE=04-06-2019

예상 출력:

SECOND_VALUE=04-06-2019 03:06:17 

답변1

이것은 작동합니다.

second_val=$(cat /var/tmp/file.txt | awk -F '#' '{print $2}')

의견에서 올바르게 제안한 것처럼 다음을 수행할 수도 있습니다.

second_val=$(awk -F '#' '{print $2}' /var/tmp/file.txt)

답변2

다른 날짜 출력 형식을 사용하여 이를 단순화할 수 있습니다. 날짜 필드의 데이터를 Unix Epoch(1970년 1월 1일 00:00:00) 이후의 초 수로 변환합니다.

$ date -d "2019-06-04 14:02:32" +"%s"

그런 다음 이 정수 값이 날짜 필드에 삽입됩니다.

답변3

당신이 정말로 루프를 원하고 필요하다고 가정껍질에파일의 각 줄(따라서텍스트 처리만 하는 것이 아닙니다.), 다음과 같이 작성할 수 있습니다.

while IFS='#' read <&3 -r first_value second_value; do
  something with "$first_value" and "$second_value" 3<&-
done 3< "/var/tmp/${file}.txt"

관련 정보