AWK命令使用Field-separator分隔行

时间:2014-09-04 15:19:39

标签: bash shell awk

 Info 750: local macro 'ADD_GEN_METHOD' (line 149, file /home/vya3kor/vmshare/vya3kor_rbin_g3g_tas_lcmccatestadapter.vws/di_cfc/components/spm/LcmProject/framework/cca/server/generic/spm_CcaServiceHandlerFiParamConfig.cpp) not referenced

我想使用awk和field-separator (line

将上面的行分开

我使用了这个命令,但它不能正常工作

$ grep Info.* 1.txt |awk -F "(line" '{print $1}'
error : awk: fatal: Unmatched ( or \(: /(line/

输出我想:

/di_cfc/components/spm/LcmProject/framework/cca/server/generic/spm_CcaServiceHandlerFiParamConfig.cpp%149%Info 750%local macro 'ADD_GEN_METHOD'%

所以我使用了这个命令:

$ grep  '^[Ii]nfo.*:'|
awk -F ":" '{print $1"%" $2}'| 
awk -F ", file.*.vws" '{print $1"%" $2 }'| 
awk -F ") not referenced" '{print $1"%" }'|
awk -F '(' '{print $1"%" $2"%" $3}'|
awk -F "line" '{print $1 $2 $3 }' | 
awk -F "%" '{print $1$ "\n2" $3 $4 $4 $5}'

5 个答案:

答案 0 :(得分:3)

你可以使用这个awk:

awk -F '\\(line' '{print $1}'
Info 750: local macro ADD_GEN_METHOD

(是需要转义的特殊正则表达式符号。

答案 1 :(得分:2)

而不是转义(,你可以这样做:

awk -F'[(]line' '... your codes'

我个人认为它更容易阅读。

答案 2 :(得分:0)

如果通过-v

设置了字段分隔符,则需要使用三个反斜杠
$ echo 'Info 750: local macro 'ADD_GEN_METHOD' (line 149, file /home/vya3kor/vmshare/vya3kor_rbin_g3g_tas_lcmccatestadapter.vws/di_cfc/components/spm/LcmProject/framework/cca/server/generic/spm_CcaServiceHandlerFiParamConfig.cpp) not referenced' | awk -v FS="\\\(line" '{print $1}'
Info 750: local macro ADD_GEN_METHOD 

答案 3 :(得分:0)

通过所有这些切割,您可能会更好地使用sed

sed -n '/^[Ii]nfo/s/\(Info.*\): \([^(]*\).*file \([^)]*)\) .*/\3%\1%\2/gp' 1.txt

答案 4 :(得分:0)

$ cat file
Info 750: local macro 'ADD_GEN_METHOD' (line 149, file /home/vya3kor/vmshare/vya3kor_rbin_g3g_tas_lcmccatestadapter.vws/di_cfc/components/spm/LcmProject/framework/cca/server/generic/spm_CcaServiceHandlerFiParamConfig.cpp) not referenced
$
$ cat tst.awk
BEGIN{ FS=" *[()] *"; OFS="%" }
/^[Ii]nfo.*:/ {
    split($2,a,/[ ,]+/)
    sub(/: /,OFS,$1)
    sub(/.*\.vws/,"",$2)
    print $2, a[2], $1 OFS
}
$
$ awk -f tst.awk file
/di_cfc/components/spm/LcmProject/framework/cca/server/generic/spm_CcaServiceHandlerFiParamConfig.cpp%149%Info 750%local macro 'ADD_GEN_METHOD'%
$

或者你可以通过一次gensub()调用在GNU awk中完成所有操作,或者只使用sed作为@chthonicdaemon建议,因为这只是一行上的简单替换。