ファイルの内容内でタイムスタンプを変数として印刷したいと思います。データと時間の間のスペースを無視するには、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 Epoch(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"