Bash 使用awk命令添加新列会将整个内容添加到最后一列?

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将当前日期字段附加到管道分隔的内容中。整个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, $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”)被解释为
$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')”之外