如何使用awk在多个字段中设置值?

如何使用awk在多个字段中设置值?,awk,Awk,假设我在一个文件(file.txt)中有以下数据: 我想在字段1($1)前面加一个“A”,在字段3($3)前面加一个“B”。我的awk脚本会是什么样子?我试过: awk -F "|" -OFS='|' ' { $1 = "A"$1 $3 = "B"$3 print; } ' file.txt 但这不起作用。结果是: Aone|two|three|four|five|six B 对不起,我不是这里的优秀awk程序员。看来我已经解决了。这与输出字段分隔符(O

假设我在一个文件(file.txt)中有以下数据:

我想在字段1($1)前面加一个“A”,在字段3($3)前面加一个“B”。我的awk脚本会是什么样子?我试过:

awk -F "|" -OFS='|' '
   {
    $1 = "A"$1
    $3 = "B"$3
    print;
   }
' file.txt
但这不起作用。结果是:

Aone|two|three|four|five|six  B

对不起,我不是这里的优秀awk程序员。

看来我已经解决了。这与输出字段分隔符(OFS)有关。如果我发布以下命令,它将起作用:

awk -F "|" 'BEGIN{OFS="|";}{$1="A"$1;$3="B"$3; print}' file.txt

OFS值必须在脚本内部,并且不能作为参数传递给awk。不清楚原因。

使用标志
-OFS='|'
将字段分隔符设置为
S=|
。照办

awk '...' FS=\| OFS=\| file.txt

您只需要使用
-vofs='|'
而不是
-OFS='|'
,但是更好的方法是同时设置这两个变量(
awk'BEGIN{FS=OFS=“|”}{$1=“A”$1;$3=“B”$3;print}file.txt
)以避免在两个位置使用相同的硬编码值(
“|FS=OFS=“/code>)。
awk '...' FS=\| OFS=\| file.txt