我需要替换大文件头中的日期。所以我在标题中有多个列,使用|(管道)作为分隔符,如下所示: A | B05 | 1 | XXC | 2018年6月29日| AC23 |很快
所以我需要相同的标题,但日期(第5列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23
对我来说有什么解决方案吗?我尝试使用awk和sed,但是他们都给我带来了比我更大的错误。我对此很新,我真的很想了解解决方案。你能帮帮我吗?
答案 0 :(得分:0)
您可以使用以下命令替换newdate变量内容的每一行的第5列:
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}{ $5 = newdate }1' infile > outfile
<强>解释强>
awk -v newdate="2018/08/29" ' # call awk, and set variable newdate
BEGIN{
FS=OFS="|" # set input and output field separator
}
{
$5 = newdate # assign fifth field with a content of variable newdate
}1 # 1 at the end does default operation
# print current line/row/record, that is print $0
' infile > outfile
如果您想在标题中跳过第一行,请使用FNR>1
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR>1{ $5 = newdate }1' infile > outfile
如果您只想替换第1行中的第5列,请使用FNR==1
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR==1{ $5 = newdate }1' infile > outfile
如果您仍有问题,请使用示例输入框架您的问题 预期的输出,这样就很容易解释你的问题。
答案 1 :(得分:0)
短 sed 解决方案:
sed -Ei '1s~\|[0-9]{4}/[0-9]{2}/[0-9]{2}\|~|2018/08/29|~' file
-i
- 就地修改文件
1s
- 仅在第1(标题)行中替换
[0-9]{4}/[0-9]{2}/[0-9]{2}
- 日期模式