gpt4 book ai didi

awk - 记录不分界时将多行记录创建为单行

转载 作者:行者123 更新时间:2023-12-04 14:26:09 25 4
gpt4 key购买 nike

我需要处理分布在多行中的记录。例如,我需要将多行记录转换为单行记录,然后从中获取我需要的任何内容。记录没有很好地划分,因此我不能将 RS 设置为 \n\n

cat input
constant_string bla bla1
bla bla bal
fooo foooooo baaar #End of record 1
constant_string bla1 bla2
abcd cdfe fghi jkhil
foo bar bar bar bar bar bar #End of record 2
constant_string bla bla3
random data is present #End of record 3

为了实现这一点,我通过在两条记录之间添加新行将这些未划界的记录转换为划界的记录,例如:

awk '{gsub(/^constant_string/,"\n&")}1' input

constant_string bla bla1
bla bla bal
fooo foooooo baaar

constant_string bla1 bla2
abcd cdfe fghi jkhil
foo bar bar bar bar bar bar

constant_string bla bla3
random data is present

一旦我得到划定的记录,我就可以将 RS 设置为 \n\n 并执行我需要的任何操作。

awk '{gsub(/^constant_string/,"\n&")}1' input |awk -v RS= '{$1=$1}1'
constant_string bla bla1 bla bla bal fooo foooooo baaar
constant_string bla1 bla2 abcd cdfe fghi jkhil foo bar bar bar bar bar bar
constant_string bla bla3 random data is present

问题:

我可以使用两个步骤实现解决方案,是否可以在 awk 中一步完成?

我尝试了以下但没有成功:

awk  -v RS="" '{gsub(/^constant_string/,"\n&")}1'  input
awk -v RS="" '{$0=gensub(/^constant_string/,"\n&",$0)}1' input

最佳答案

如果在下一个 constant_stringEND 缓冲并处理 b 怎么样?使用函数:

$ awk '
function process(str) { if(str!="") print str }
/^constant_string/ { process(b); b=$0; next }
{ b=b OFS $0 }
END { process(b) }
' file
constant_string bla bla1 bla bla bal fooo foooooo baaar
constant_string bla1 bla2 abcd cdfe fghi jkhil foo bar bar bar bar bar bar
constant_string bla bla3 random data is present

关于awk - 记录不分界时将多行记录创建为单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com