替换大型.txt文件标题中的列-unix
我需要替换一个大文件头中的日期。所以我在标题中有多个列,使用|(pipe)作为分隔符,如下所示: A | B05 | 1 | xxc | 2018/06/29 | AC23 |不久 因此,我需要相同的标题,但日期(第5列)已更新:A | B05 | 1 | xxc | 2018/08/29 | AC23替换大型.txt文件标题中的列-unix,unix,awk,sed,header,large-files,Unix,Awk,Sed,Header,Large Files,我需要替换一个大文件头中的日期。所以我在标题中有多个列,使用|(pipe)作为分隔符,如下所示: A | B05 | 1 | xxc | 2018/06/29 | AC23 |不久 因此,我需要相同的标题,但日期(第5列)已更新:A | B05 | 1 | xxc | 2018/08/29 | AC23 有什么解决办法吗?我尝试了awk和sed,但它们都给我带来了比我更大的错误。我是新手,我真的很想了解解决方案。您能帮我一下吗?您可以使用下面的命令,用newdate变量的内容替换每行的第5列:
有什么解决办法吗?我尝试了awk和sed,但它们都给我带来了比我更大的错误。我是新手,我真的很想了解解决方案。您能帮我一下吗?您可以使用下面的命令,用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
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
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR==1{ $5 = newdate }1' infile > outfile
如果您仍然有问题,请使用示例输入和
期望的输出,以便很容易解释您的问题
Shortsed解决方案:
sed -Ei '1s~\|[0-9]{4}/[0-9]{2}/[0-9]{2}\|~|2018/08/29|~' file
-就地修改文件-i
-仅在第1行(标题)中替换1s
-日期模式[0-9]{4}/[0-9]{2}/[0-9]{2}
sed-E-i.bak'1s~\\[0-9]{4}/[0-9]{2}/[0-9]{2}\\\\\~~ 2018/08/29 | ~”文件