awk コマンドを使用して日付と時刻の間のスペースを無視する方法

awk コマンドを使用して日付と時刻の間のスペースを無視する方法

ファイルの内容からタイムスタンプを 1 つの変数として出力したいです。データと時間の間のスペースを無視するには、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"

関連情報