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

Bash 通过拆分文件中的字符串来解析文件,并使用单个命令获得所需的输出,bash,awk,cut,Bash,Awk,Cut,我使用bash查看文件并解析结果。有人能告诉我如何使用cut/awk分割字符串,并通过使用单个命令获得所需的输出吗?我可以通过单独的剪切获得下面的输出(使用两个命令和连接),但我想使用单个命令而不是两个命令 test.log: 试用代码: 预期: 下面的单个awk可能会在同样的情况下帮助您 awk 'END{sub(/com\.yahoo\.qa\.java\.projects\./,"",$4);print $1,$2,$3,$4}' Input_file 或者对于所有类型的awks,以下

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

test.log: 试用代码: 预期:
下面的单个
awk
可能会在同样的情况下帮助您

awk 'END{sub(/com\.yahoo\.qa\.java\.projects\./,"",$4);print $1,$2,$3,$4}'  Input_file
或者对于所有类型的
awk
s,以下内容也可能对您有所帮助。(根据ED爵士的建议):


下面的单个
awk
可能会在同样的情况下帮助您

awk 'END{sub(/com\.yahoo\.qa\.java\.projects\./,"",$4);print $1,$2,$3,$4}'  Input_file
或者对于所有类型的
awk
s,以下内容也可能对您有所帮助。(根据ED爵士的建议):


由于这是一个单独生产线的简单替代,因此它更适合sed而不是awk,并且根本不适合切割:

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

由于这是一个单独生产线的简单替代,因此它更适合sed而不是awk,并且根本不适合切割:

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

使用awk

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

使用awk

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


打印数据背后的逻辑是什么?@123除了解析以获得所需的值,而不是整行以执行进一步的所需操作。虽然逻辑是什么,但您如何确定要打印的内容…Hi Jitesh。我注意到,在你的一些问题中,标题在问题正文的第一行重复。这是不必要的重复,只是给读者提供了更多的文本。此外,我们要求这里的问题不太健谈,因此不需要添加感谢、提前感谢、请帮助我等。打印什么数据背后的逻辑是什么?@123除了解析以获得所需值而不是整行以执行进一步的所需操作外,什么是逻辑,您如何确定要打印什么…Hi Jitesh。我注意到,在你的一些问题中,标题在问题正文的第一行重复。这是不必要的重复,只是给读者提供了更多的文本。另外,我们要问的是,这里的问题不是闲聊,所以没有必要添加感谢、提前感谢、请帮助我等等@EdMorton,谢谢你,先生。请你解释更多关于未定义的行为,对不起,我没有得到它/@RavinderSingh13极好的解决方案@吉特索吉特拉,很高兴它帮助了你,继续分享,继续发帖,干杯@EdMorton,谢谢Ed解释你太棒了先生,我添加了编辑版本,如果你有任何问题,请告诉我。是的,就是这样做的,但是丢失了split()中的
第三个参数因为您希望使用FS进行拆分,所以将希望FS具有的值硬编码到默认使用FS的位置是没有意义的。@EdMorton,谢谢您,先生。请你解释更多关于未定义的行为,对不起,我没有得到它/@RavinderSingh13极好的解决方案@吉特索吉特拉,很高兴它帮助了你,继续分享,继续发帖,干杯@EdMorton,谢谢Ed解释你太棒了先生,我添加了编辑版本,如果你有任何问题,请告诉我。是的,就是这样做的,但是丢失了split()中的
第三个参数因为您希望使用FS进行拆分,所以将希望FS具有的值硬编码到默认情况下使用FS的位置是没有意义的。这是一个很好的解决方案!为什么不直接使用
\(.*\)com
@123呢?因为如果
com
在字符串后面出现,那么它就会失败。如果出现,那么它就会失败,最开始的
*
是贪婪的。也许你的意思是
[^ |]*
?对,我完全希望OP能给出后续评论,大意是“但我的输入并不总是包含
com.yahoo.qa.java.projects.
…”。这是一个很好的解决方案!为什么不直接使用
\(.*\)com
@123呢?因为如果
com
在字符串后面出现,那么它就会失败。如果出现,那么它就会失败,最开始的
*
是贪婪的。也许你的意思是
[^ |]*
?对,我完全希望OP会给出后续评论,大意是“但我的输入并不总是包含
com.yahoo.qa.java.projects.
…”。
$ awk -F "com[.]yahoo[.]qa[.]java[.]projects[.]" 'sub(/\(\).*/,"",$2)' file
1/98 | (PASSED)  stackoverview.questions.Password_01