我有以下格式的文件:
field1|field2|field3
field1|"field2|field2"|field3
Run Code Online (Sandbox Code Playgroud)
注意第二行包含双引号。双引号内的字符串属于字段 2。如何使用 awk 提取它?我一直在谷歌搜索没有结果。我也尝试过,但没有运气
FS='"| "|^"|"$' '{print $2}'
Run Code Online (Sandbox Code Playgroud)
iru*_*var 12
如果你有最新版本的gawk你很幸运。有这个FPAT功能,记录在这里
awk 'BEGIN {
FPAT = "([^|]+)|(\"[^\"]+\")"
}
{
print "NF = ", NF
for (i = 1; i <= NF; i++) {
sub(/"$/, "", $i); sub(/^"/, "", $i);printf("$%d = %s\n", i, $i)
}
}' file
NF = 3
$1 = field1
$2 = field2
$3 = field3
NF = 3
$1 = field1
$2 = field2|field2
$3 = field3
Run Code Online (Sandbox Code Playgroud)
Tim*_*iam -3
您可能需要格式化这些数据,sed以便更容易地解析它awk。例如:
$ sed 's/"//g' awktest1.txt
field1|field2|field3
field1|field2|field2|field3
$ sed 's/"//g' awktest1.txt > awktest2.txt
$ awk 'BEGIN {FS = "|"} ; {print $2}' awktest2.txt
field2
field2
Run Code Online (Sandbox Code Playgroud)
但话又说回来,我不知道您正在使用的数据的性质。