파일 내용에서 타임스탬프를 하나의 변수로 인쇄하고 싶습니다. 데이터와 시간 사이의 공간을 무시하려면 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"