我正在尝试从file2
输入到file1
,以便file2
中的每一行是每一行file1
的第一字段,后跟一个空格和当前时间。
例如
IN-X_4096_20140802_121306_007 `random text`
IN-X_4096_20140802_133431_012 `random text`
IN-A_6046_20130613_165426 `random text`
IN-A_6046_20130613_165426 `random text`
IN-X_4096_20140802_133431_014 `random text`
成为
IN-X_4096_20140802_121306_007 14:24:32
IN-X_4096_20140802_133431_012 14:24:32
IN-A_6046_20130613_165426 14:24:32
IN-A_6046_20130613_165426 14:24:32
IN-X_4096_20140802_133431_014 14:24:32
但是我得到的是
IN-X_4096_20140802_121306_007 0
IN-X_4096_20140802_133431_012 0
IN-A_6046_20130613_165426 0
IN-A_6046_20130613_165426 0
IN-X_4096_20140802_133431_014 0
我使用的代码是:
awk '{b=$1" "date +"%r"; print b >"file2.csv" }' file1.csv
当我使用“%T”时也会发生同样的事情
答案 0 :(得分:3)
这样写,date
被解释为变量名。由于未设置,因此它取决于上下文的值为""
或0
。 +
运算符之后的含义是它是在算术上下文中求值的,因此它取值为0
。
要将date +%r
的值传递到awk脚本,请使用以下两种方法之一:
# the time when the script was run, doesn't change
awk -v time="$(date +%r)" '{ print time }' file1.csv
# the time when each record is read
awk '{ cmd = "date +%r"; cmd | getline time; print time; close(cmd) }' file1.csv
答案 1 :(得分:2)
根据您的问题尚不清楚您期望的是哪种行为,但这是两个Gnu awk解决方案:
在整个命令运行期间,计算出的日期时间字符串必须恒定:
awk 'BEGIN{t=strftime("%r")}{ print $1,t }' file1.csv > file2.csv
计算出的日期时间字符串必须每行更新一次:
awk '{ print $1,strftime("%r") }' file1.csv > file2.csv