我需要替换大文件的头中的日期。所以我有多个列头,使用|(管)作为分隔符,像这样: A | B05 | 1 | xxc | 2018/06/29 | AC23 | SoOn替换一个大的.txt文件头中的列--unix
所以我需要相同的标题,但与日期(第五列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23
对我有什么解决方案?我用awk和sed尝试过,但他们两个都带我比我更大的错误。我是新手,我真的很想理解这个解决方案。那么你能帮我吗?
我需要替换大文件的头中的日期。所以我有多个列头,使用|(管)作为分隔符,像这样: A | B05 | 1 | xxc | 2018/06/29 | AC23 | SoOn替换一个大的.txt文件头中的列--unix
所以我需要相同的标题,但与日期(第五列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23
对我有什么解决方案?我用awk和sed尝试过,但他们两个都带我比我更大的错误。我是新手,我真的很想理解这个解决方案。那么你能帮我吗?
您可以使用下面的命令,从每一行替换第5列与newdate变量的内容:
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
如果你仍然有问题,与样品输入和 预期输出帧你的问题,从而使这将很容易解释你的问题。
这是可怕的。对我来说正确的解决方案是最后一个,并正常工作。非常感谢! – Light
短SED溶液:
sed -Ei '1s~\|[0-9]{4}/[0-9]{2}/[0-9]{2}\|~|2018/08/29|~' file
-i
- 修改文件就地
1s
- 代替仅在第一(标题)线
[0-9]{4}/[0-9]{2}/[0-9]{2}
- 日期模式
你好,谢谢你的回答。当我使用你的解决方案时,我收到一条错误消息<< sed:1:“header.txt”:在h命令结尾的额外字符>> – Light
@Light,它应该在Linux上工作。你在MacOS上吗? – RomanPerekhrest
是的,我在MacOs上做了一些测试 – Light
显示您的工作和错误消息。 –