簡體   English   中英

使用awk命令添加新列會將整個內容添加到最后一個?

[英]Adding new column using awk command adds the whole content to the last?

我試圖在每行中使用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|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個字段):

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|06-22-2014

我猜這里的問題是$(date +"%d-%m-%Y"); 腳本中的bash $0被解釋為$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

如果要使用month-date-year格式,則將date命令更改為date +"%m-%d-%Y"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM