这是我的第一篇文章,所以请原谅我,如果我错过了任何细节。
问题陈述:我在文件中有很多这样的行。字段之间用空格分隔。'Temp.200.200B.Y2K & K-102 & P-503B.SP' (tp9012ga-bt102-734b-pqm4-kjk94kj10), PASSED, 2023-02-12T06:39:48Z, 2023-02-12T07:25:48.044Z, 1440] took 99ms including network delay.
我想保留什么是在单引号,也打破了这些领域与""分隔符。所需的输出如下。'Temp.200.200B.Y2K & K-102 & P-503B.SP' (tp9012ga-bt102-734b-pqm4-kjk94kj10), 2023-02-12T06:39:48Z, 2023-02-12T07:25:48.044Z, 99
现在请记住,单引号内的字符变化很大,但它们总是封装在单引号内。
我尝试过使用空格分隔符进行剪切,但是它也会考虑单引号内字符串中的空格。cut -d\' -f1-6
此外,如果您注意到我想要的输出,我还想删除一些字段和一些字符,如'ms'从99ms。
3条答案
按热度按时间gdrx4gfi1#
如何用""分隔符分隔一行,但不包括用单引号括起来的字符串?
我将按照以下方式利用GNU
AWK
完成此任务,考虑以下简单示例,让file.txt
内容为那么
给出输出
说明:我使用
FPAT
来通知GNUAWK
字段的组成,即单引号(因为'
用作终止符,所以我使用\047
,它是该字符的八进制ASCII代码)后跟零个或更多个非引号,后跟单引号或(|
)零个或更多个非空格字符。免责声明:该解决方案假设'
是完全平衡的,并且在非终止的引用字段内从不存在'
。jvidinwx2#
这可能对您有用(GNU sed):
在空格分隔符前添加换行符。
使用substitution命令中的求值,再次调用sed并将每个字段视为一行。
删除或修改行(字段)。
删除插入的换行符。
sqougxex3#
通过查看问题陈述和所需的输出,您可能需要使用
,
作为分隔符,并使用awk
和sed
的组合。在本例中,我将简单地回显您的 * PROBLEM STATEMENT * 字符串,以向您展示如何执行此操作。
我假设行格式在您的文件中是相同的(除了
,
外,引号内的字符变化很大,没有问题)@Ed Morton-我试过你的方法了,你是对的。它也只能用awk来完成。命令如下。