文件通过awk读取

时间:2015-06-26 18:19:06

标签: shell awk

我的文件包含下面的行,就像我想通过awk管理一样

filename:-test.txt

"A","@900",9999,"Test Place","Quayside Sc, Sligo, Tel: 071 9154382","SCRIPT",20150317

我想管理这个是单字符串" Quayside Sc,Sligo,电话:071 9154382"

当我执行以下命令时,它会在逗号之前自动获取第一个字符串

echo "A","@900",9999,"Test Place","Quayside Sc, Sligo, Tel: 071 9154382","SCRIPT",20150317 | awk -F ',' '{ print $4 "|" $8 }'
Test Place|SCRIPT

1 个答案:

答案 0 :(得分:2)

在gnu-awk中使用FPAT,您可以将整个引用字符串作为单个字段:

awk 'BEGIN{ FPAT="\"[^\"]*\"|[^,]*" } {print $4 ORS $5}' file
"Test Place"
"Quayside Sc, Sligo, Tel: 071 9154382"

FPAT="\"[^\"]*\"|[^,]*"使用正则表达式来分解由引号括起的字段或用逗号分隔。

为了演示目的,这里是每个解析字段:

awk 'BEGIN{ FPAT="\"[^\"]*\"|[^,]*" } {for (i=1; i<=NF; i++) {
         printf "$%d: <%s>\n", i, $i}}' file
$1: <"A">
$2: <"@900">
$3: <9999>
$4: <"Test Place">
$5: <"Quayside Sc, Sligo, Tel: 071 9154382">
$6: <"SCRIPT">
$7: <20150317>

更新:如果您没有gnu-awk 4,那么您可以使用此perl命令获得相同的效果:

perl -F',(?=(?:(?:[^\"]*\"){2})*[^\"]*$)' -ane 'print $F[3] . "\n" . $F[4] . "\n"' file
"Test Place"
"Quayside Sc, Sligo, Tel: 071 9154382"