【发布时间】:2017-12-14 09:02:17
【问题描述】:
大家好,我有以下数据。
61684 376 23 106 38695633 1 0 0 -1 /C/Program Files (x86)/ 16704 root;TrustedInstaller@NT:SERVICE root;TrustedInstaller@NT:SERVICE 0 1407331175 1407331175 1247541608
8634 416 13 86 574126 1 0 0 -1 /E/KYCImages/ 16832 root;kycfinal@CGKYCAPP03 root;None@CGKYCAPP03 0 1406018846 1406018846 1352415392
60971 472 22 86 38613076 1 0 0 -1 /E/KYCwebsvc binaries/ 16832 root;kycfinal@CGKYCAPP03 root;None@CGKYCAPP03 0 1390829495 1390829495 1353370744
1 416 10 86 1 1 0 0 -1 /E/KycApp/ 16832 root;kycfinal@CGKYCAPP03 root;None@CGKYCAPP03 0 1411465772 1411465772 1351291187
现在我使用下面的代码:
awk 'BEGIN{FPAT = "([^ ]+)|(\"[^\"]+\")"}{print $10}' | awk '$1!~/^\/\./' | sort -u | sed -e 's/\,//g' | perl -p00e 's/\n(?!\Z)/;/g' filename
我得到这个输出
/C/Program;/E/KycApp/;/E/KYCImages/;/E/KycServices/;/E/KYCwebsvc
但是我需要从 $10 开始输出,直到再次遇到“/”,基本上我想忽略第 10 列中的任何空格,直到遇到“/”。 可能吗?
想要的输出是
/C/Program Files (x86)/;/E/KycApp/;/E/KYCImages/;/E/KycServices/;/E/KYCwebsvc binaries/
【问题讨论】:
-
如果您有
grep和-o选项,看起来这就是您想要的...grep -o '/[^.].*/' filename | sort -u | paste -sd';'...您的示例数据应该包含说明您为什么需要awk '$1!~/^\/\./'的行或sed -e 's/\,//g' -
粘贴 -sd ';'在 AIX 中不起作用,所以我使用 perl -p00e 's/\n(?!\Z)/;/g' 我需要 awk '$1!~/^\/\./' 来忽略任何具有 "/ " 开头,后跟 "." grep -o 在 AIX 中也不起作用。所以需要别的东西。
-
那么单个命令
perl -lne '($p)=/(\/[^.].*\/)/; $h{$p}=1; END{print join ";", keys %h}' filename怎么样? -
你在输出中有
/E/KycServices/;。我在您的输入中没有看到它
标签: awk aix text-processing