我正在尝试将当前日期写入文件。 我想将它写入第2行第2列(列由';'分隔)
使用Shell
到目前为止我尝试了什么,不工作:
paste <(echo "$(date)") <(awk -F ";" '{print $2}' file)
有没有明智的方法可以这样做?
示例&#39;文件&#39;:
John;Wed Mar 14 19:41:38 CET 2018;18
Sandra;Mon Mar 14 19:41:38 CET 2018;21
David;Sun Mar 14 19:41:38 CET 2018;25
编辑&#39;文件&#39;后的示例:
John;Wed Mar 14 19:41:38 CET 2018;18
Sandra;The Date When Editing The File With Script;21
David;Sun Mar 14 19:41:38 CET 2018;25
答案 0 :(得分:3)
用当前日期替换第二行第二列:
$ awk -F";" -v d="$(date)" 'NR==2{$2=d} 1' OFS=";" file
John;Wed Mar 14 19:41:38 CET 2018;18
Sandra;Wed Mar 14 13:28:59 PDT 2018;21
David;Sun Mar 14 19:41:38 CET 2018;25
-F";"
这告诉awk使用;
作为字段分隔符。
-v d="$(date)"
这定义了包含当前日期的awk变量d
。
NR==2{$2=d}
在第二行NR==2
上,这会告诉awk将第二列$2
替换为变量d
的值。
1
这是打印当前行的简写。
OFS=";"
这告诉awk使用;
作为输出的字段分隔符。
使用现代GNU awk就地修改文件:
gawk -i inplace -F";" -v d="$(date)" 'NR==2{$2=d} 1' OFS=";" file
使用macOS或BSD或更旧的GNU awk修改文件:
awk -F";" -v d="$(date)" 'NR==2{$2=d} 1' OFS=";" file >tmp && mv tmp file
以下三行都是等效的。你使用哪一个是风格问题:
awk -F";" -v d="$(date)" 'NR==2{$2=d} 1' OFS=";" file
awk -F";" -v d="$(date)" -v OFS=";" 'NR==2{$2=d} 1' file
awk -F";" 'NR==2{$2=d} 1' d="$(date)" OFS=";" file
答案 1 :(得分:0)
你能试试这个:
sed "2s/\(^[^\;]*\;[^\;]*\)/\1\;`date`/" <filename>