如何使用 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 紀元(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"

相關內容