通过在文件中拆分字符串来解析文件,并使用单个命令获得所需的输出

时间:2017-11-10 16:26:51

标签: bash awk cut

我使用bash查看文件并解析结果。有人能告诉我如何使用cut / awk分割字符串并使用单个命令获得所需的输出吗?我可以通过单独剪切获得以下输出(使用2个命令和连接)但我想使用单个命令而不是两个命令。

test.log中:

1/98 | (PASSED) com.yahoo.qa.java.projects.stackoverview.questions.Password_01() | 21:20:20

尝试过的代码:

str1=`cat test.log | tail -1 | cut -d '|' -f 1`
str2=`cat test.log | tail -1 | cut -d '|' -f 2 | sed -e 's/com.yahoo.qa.java.projects./''/g'`
str3="${str1} | ${str2}"

预期:

1/98 | (PASSED) stackoverview.questions.Password_01

3 个答案:

答案 0 :(得分:3)

由于这是单个行上的简单替换,因此它比awk更适合sed而不适合切割:

$ sed 's/\(.*| [^ ]* \)com\.yahoo\.qa\.java\.projects\.\([^(]*\).*/\1\2/' file
1/98 | (PASSED) stackoverview.questions.Password_01

答案 1 :(得分:1)

关注单awk可能对您有帮助。

awk 'END{sub(/com\.yahoo\.qa\.java\.projects\./,"",$4);print $1,$2,$3,$4}'  Input_file

对于所有类型的awk以下内容的OR也可以帮助您。(根据SIR ED的建议):

awk '{value=$0} END{split(value, a," ");sub(/com.yahoo.qa.java.projects\./,"",a[4]);print a[1],a[2],a[3],a[4]}'  Input_file

答案 2 :(得分:1)

使用 awk

$ awk -F "com[.]yahoo[.]qa[.]java[.]projects[.]" 'sub(/\(\).*/,"",$2)' file
1/98 | (PASSED)  stackoverview.questions.Password_01