我想将时间戳打印为文件内容中的一个变量。我需要 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"