我需要像这样读取CSV文件( list.csv ):
[y_i]
并在第3、4和5列中添加基于年/月/日的Unix时间戳的列(无论放在哪里),都可以得到:
append_data += '<td><a href="#" class="delete-link" data-note-id="' + value.versionNote.idVersionNote + '"">Delete note</a></td>'
所以我写了这个 script.sh :
$(document).on('click', '.delete-link', function() {
var idVersionNote = this.attr("data-note-id");
deleteVersionNote(idVersionNote);
});
然后我跑了
0;John Doe;2001;03;24
1;Jane Doe;1985;12;05
2;Mr. White;2018;06;01
3;Jake White;2017;11;20
...
它可以正常工作,但是在包含非常大的CSV时非常慢。
有没有一种方法可以在sed / awk命令行中更快地完成它?
我的意思是,我可以(例如)将bash命令注入到sed / awk行中吗? 例如(我知道这行不通,只是一个例子):
0;John Doe;2001;03;24;985392000
1;Jane Doe;1985;12;05;502588800
2;Mr. White;2018;06;01;1527811200
3;Jake White;2017;11;20;1511136000
...
答案 0 :(得分:2)
GNU awk
来解救!
$ gawk -F';' '{$0=$0 FS mktime($3" "$4" "$5" 00 00 00")}1' file
0;John Doe;2001;03;24;985410000
1;Jane Doe;1985;12;05;502606800
2;Mr. White;2018;06;01;1527825600
3;Jake White;2017;11;20;1511154000
不确定默认使用的小时/分钟/秒。
答案 1 :(得分:0)
对于其他没有内置时间功能的awks:
awk -F';' '{
cmd = "date -d "$3 $4 $5" +%s"
cmd | getline time
close(cmd)
$0 = $0 FS time
print
}' file
或perl
perl -MTime::Piece -F';' -lane '
print join ";", @F, Time::Piece->strptime("@F[2..4]", "%Y %m %d")->epoch
' file
# or
perl -MTime::Local -F';' -lane '
print join ";", @F, timelocal(0, 0, 0, $F[4], $F[3]-1, $F[2]-1900)
' file