通过AWK文件阅读(File read through awk)

2019-10-23 12:58发布

我有包含像下面我想通过awk来管理线文件

文件名:-test.txt

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

我要管理这是一个字符串“码头SC,斯莱戈,电话:071 9154382”

它会自动采取第一个字符串逗号前,当我执行下面的命令

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

Answer 1:

使用FPAT在GNU-AWK你可以得到整个引号的字符串作为单场:

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"


文章来源: File read through awk
标签: shell awk