我的档案temp.txt
ID53,20150918,2015-09-19,,0,CENTER<br>
ID54,20150911,2015-09-14,,0,CENTER<br>
ID55,20150911,2015-09-14,,0,CENTER
我需要替换并转换第二个字段(yyyymmdd)几秒钟
我尝试了,但只更换了第一行
awk -F"," '{ ("date -j -f ""%Y%m%d"" ""20150918"" ""+%s""") | getline $2; print }' OFS="," temp.txt
并试图喜欢这个
awk -F"," '{system("date -j -f ""%Y%m%d"" "$2" ""+%s""") | getline $2; print }' temp.txt
输出是:
1442619474
sh: 0: command not found
ID53,20150918,2015-09-19,,0,CENTER
1442014674
ID54,20150911,2015-09-14,,0,CENTER
1442014674
ID55,20150911,2015-09-14,,0,CENTER
使用gsub
也无法
awk -F"," '{gsub($2,"system("date -j -f ""%Y%m%d"" "$2" ""+%s""")",$2); print}' OFS="," temp.txt
awk: syntax error at source line 1
context is
{gsub($2,"system("date -j -f ""%Y%m%d"" "$2" >>> ""+% <<< s""")",$2); print}
awk: illegal statement at source line 1
extra )
我需要输出。怎么样?
ID53,1442619376,2015-09-19,,0,CENTER
ID54,1442014576,2015-09-14,,0,CENTER
ID55,1442014576,2015-09-14,,0,CENTER
答案 0 :(得分:2)
这个 GNU awk
脚本应该成功。如果您的Mac上尚未安装,我建议安装macport
,然后安装GNU awk
。您还可以安装一个不错的版本bash
,date
和其他重要的实用程序,默认情况下OSX上真的很令人失望。
BEGIN { FS = ","; OFS = FS; }
{
y = substr($2, 1, 4);
m = substr($2, 5, 2);
d = substr($2, 7, 2);
$2 = mktime(y " " m " " d " 00 00 00");
print;
}
将其放入文件(例如txt2ts.awk
)并使用以下文件处理您的文件:
$ awk -f txt2ts.awk data.txt
ID53,1442527200,2015-09-19,,0,CENTER<br>
ID54,1441922400,2015-09-14,,0,CENTER<br>
ID55,1441922400,2015-09-14,,0,CENTER
请注意,我们没有相同的时间戳。我让你试着去了解它的来源,这是另一个问题。
说明:substr(s, m, n)
返回从n
开始的s
- 字符子字符串m
(从1开始)。 mktime("YYYY MM DD HH MM SS")
将日期字符串转换为时间戳(自纪元以来的秒数)。 FS
和OFS
分别是输入和输出字段分隔符。 BEGIN
模式的花括号之间的命令仅在开始时执行,而其他模式在文件的每一行上执行。
答案 1 :(得分:0)
您可以使用substr:
printf "%s-%s-%s", substr($6,0,4), substr($6,5,2), substr($6,7,2)
假设第6个字段是20150914,这将产生2015-09-14