【Shell】对文本timestamp进行时间/时区转换2

#!/bin/bash

# 从data_validation.txt文件中提取需要处理的行,并将结果保存到temp.txt文件中
grep -E "ORACLEDB|POSTGRES" data_validation.txt > temp.txt

# 逐行读取temp.txt文件
while IFS= read -r line; do
  # 提取倒数第二列的时区信息
  timezone=$(echo "$line" | awk -F '|' '{print $3}' | awk '{print substr($0, length($0) - 8, 3)}')

  # 提取ORACLEDB行的时间戳
  if [[ $line == *"ORACLEDB"* ]]; then
    oracle_timestamp=$(echo "$line" | awk -F '|' '{print $3}')
  fi

  # 提取POSTGRES行的时间戳,并将其转换成与ORACLEDB行相同时区的时间
  if [[ $line == *"POSTGRES"* ]]; then
    postgres_timestamp=$(echo "$line" | awk -F '|' '{print $3}')
    converted_timestamp=$(TZ="UTC$timezone" date -d "$postgres_timestamp" +"%Y-%m-%d %H:%M:%S %z")
    line=$(echo "$line" | awk -F '|' -v timestamp="$converted_timestamp" '{$3=timestamp; print}' OFS='|')
  fi

  # 输出处理后的行
  echo "$line"
done < temp.txt

# 删除临时文件
rm temp.txt

posted @ 2024-04-24 22:32  DBAGPT  阅读(20)  评论(0编辑  收藏  举报