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

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

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

전:

$ 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 시대(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"

관련 정보