我正在编写一个 AWK 脚本,该脚本应将 excel csv 表中第 3 列的值替换为特定值,并且 awk 应忽略第一行和最后一行。问题在于我尝试更新的字符串导致问题,下面是我正在使用的命令:
awk -v sq="'" -F, '
t{print t} {a=t=$0}
NR>2{$3=sqops_data<dbms=Teradata::instance=idw-prod>sq;t=$0}
END {print a}
' OFS=, test1.csv
但是,它在 :: 处给出了语法错误。
示例 CSV:
+++ Database Column - begin +++
Name,Host,Database,Database Schema,Database Table,Short Description,Long Description
CUST_ID,IDW-PROD,ops_data<dbms=Teradata::instance=pdw>,ops_data,D_FGHD_T,CUSTOMER IDENTIFIER,This field stores a unique value
+++ Database Column - end +++
更新另一个场景:我碰巧陷入了这个问题。想将第三个字段更新为以下值:
["LDGF","GHFT"]
已尝试如下但它只更新了一个空白的[]。
awk -v sq="" -F, 't{print t} {a=t=$0} NR>2{$3=sq"["LDGF","GHFT"]"sq;t=$0} END {print a}' OFS=, test2.csv
还需要知道如何在一条语句中更新多列。
答案1
sq
将变量的值附加/添加到细绳 ops_data<dbms=Teradata::instance=idw-prod>
,后者必须引用:
$3=sq"ops_data<dbms=Teradata::instance=idw-prod>"sq
或者更容易
$3 = sq "ops_data<dbms=Teradata::instance=idw-prod>" sq
前任。
$ awk -v sq="'" -F, '
t{print t} {a=t=$0}
NR>2{$3=sq"ops_data<dbms=Teradata::instance=idw-prod>"sq;t=$0}
END {print a}
' OFS=, test1.csv
+++ Database Column - begin +++
Name,Host,Database,Database Schema,Database Table,Short Description,Long Description
CUST_ID,IDW-PROD,'ops_data<dbms=Teradata::instance=idw-prod>',ops_data,D_FGHD_T,CUSTOMER IDENTIFIER,This field stores a unique value
+++ Database Column - end +++