Bash 使用awk命令添加新列会将整个内容添加到最后一列?
我试图在每一行中使用awk将当前日期字段附加到管道分隔的内容中。整个16列被添加到第17(新)位置,而不是预期的内容。我试着改变一些事情,但没有帮助。我认为有一些基本的错误。我能在这里得到帮助吗Bash 使用awk命令添加新列会将整个内容添加到最后一列?,bash,awk,Bash,Awk,我试图在每一行中使用awk将当前日期字段附加到管道分隔的内容中。整个16列被添加到第17(新)位置,而不是预期的内容。我试着改变一些事情,但没有帮助。我认为有一些基本的错误。我能在这里得到帮助吗 awk ' BEGIN{FS="|";} { $17=$(date +"%d-%m-%Y"); printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $1, $2, $3, $4, $5, $6, $7, $8,
awk ' BEGIN{FS="|";}
{
$17=$(date +"%d-%m-%Y");
printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,
$11, $12, $13, $14, $15, $16, $17);
}' /Users/temp/dispn/content3.txt | less > /Users/temp/dispn/content4.txt
输入(16个字段):
我的输出
EX122YED| Buy online |example.com/EX122YED |example.com/EX122YED.jpg|White|new|00.00|in stock|XYZ|Accessories|Accessories|Male|30-40|y|EX122YED|0.0|EX122YED| Buy online |example.com/EX122YED |example.com/EX122YED.jpg|White|new|00.00|in stock|XYZ|Accessories|Accessories|Male|30-40|y|EX122YED|0.0
预期(17个字段):
我猜这里的问题是
$(日期+%d-%m-%Y”)脚本中的code>被解释为$0
,因为bash
没有扩展它。要防止出现这种情况,可以用双引号定义awk
脚本,如下所示:
awk "{print \$0\"|\"$(date +\"%d-%m-%Y\")}"
这需要所有类型的转义$
和“
字符才能工作
如果您不需要使用awk
,但也可以使用sed
,您可以使用:
sed "s/$/|$(date +"%d-%m-%Y")/"
我想这里的问题是脚本中的$(日期+%d-%m-%Y”);
被解释为$0
,因为bash
没有扩展它。为了防止这种情况,您可以用双引号定义awk
脚本,如下所示:
awk "{print \$0\"|\"$(date +\"%d-%m-%Y\")}"
这需要所有类型的转义$
和“
字符才能工作
如果您不需要使用awk
,但也可以使用sed
,您可以使用:
sed "s/$/|$(date +"%d-%m-%Y")/"
将日期指定给变量并用整行打印
awk -F'|' -v var=$(date +"%d-%m-%Y") '{print $0,var}' OFS="|"
示例:
$ echo 'EX122YED| Buy online |example.com/EX122YED |example.com/EX122YED.jpg|White|new|00.00|in stock|XYZ|Accessories|Accessories|Male|30-40|y|EX122YED|0.0' | awk -F'|' -v var=$(date +"%d-%m-%Y") '{print $0,var}' OFS="|"
EX122YED| Buy online |example.com/EX122YED |example.com/EX122YED.jpg|White|new|00.00|in stock|XYZ|Accessories|Accessories|Male|30-40|y|EX122YED|0.0|22-06-2014
如果您想要月-日-年
格式,请将日期
命令更改为日期+%m-%d-%Y”
将日期分配给变量,并用整行打印它
awk -F'|' -v var=$(date +"%d-%m-%Y") '{print $0,var}' OFS="|"
示例:
$ echo 'EX122YED| Buy online |example.com/EX122YED |example.com/EX122YED.jpg|White|new|00.00|in stock|XYZ|Accessories|Accessories|Male|30-40|y|EX122YED|0.0' | awk -F'|' -v var=$(date +"%d-%m-%Y") '{print $0,var}' OFS="|"
EX122YED| Buy online |example.com/EX122YED |example.com/EX122YED.jpg|White|new|00.00|in stock|XYZ|Accessories|Accessories|Male|30-40|y|EX122YED|0.0|22-06-2014
如果您想要月-日-年
格式,请将日期
命令更改为日期+%m-%d-%Y”
谢谢,它可以工作。使用转义字符的第一种解决方案。@NihalSharma不使用转义字符的另一种方法是将date命令放在awk引号$17=“'(date+%d-%m-%Y')”之外代码>谢谢,它可以工作。使用转义字符的第一种解决方案。@NihalSharma不使用转义字符的另一种方法是将date命令放在awk引号$17=“'(date+%d-%m-%Y')”之外代码>