gpt4 book ai didi

linux - 如何使用awk读取每n个字符而不是每行的文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:47 24 4
gpt4 key购买 nike

这是file.txt的内容:

hello bro
my nam§
is Jhon Does

该文件还可以包含 non-printable characters (for example \x00, or \x02) , 而且,如您所见,线条的长度并不相同。

然后我想每 5 个字符读取一次,而不必计算换行符。我用 awk 想到了这样的事情:

awk -v RS='' '{
s=s $0;
}END{
n=length(s);

for(x=1; x<n; x=x+5){
# Here I will put some calcs and stuff

i++;
print "line " i ": #" substr(s,x,5) "#"
}
}' file.txt

输出如下:

line 1: #hello#
line 2: # bro
#
line 3: #my na#
line 4: #m§
is#
line 5: # Jhon#
line 6: # Does#

它工作得很好,但是输入文件会非常大,所以性能很重要。

简而言之,我正在寻找这样的东西:

awk -v RS='.{5}' '{ # Here I will put some calcs and stuff }'

但它不起作用。

另一种可行的方法:

xxd -ps mifile.txt | tr -d '\n' | fold -w 10 | awk '{print "23" $0 "230a"}' | xxd -ps -r

您有任何想法或替代方案吗?谢谢。

最佳答案

我不确定我是否理解你想要什么,但这输出与你问题中的脚本相同,你说它工作得很好所以希望就是这样:

$ awk -v RS='.{5}' 'RT!=""{ print "line", NR ": #" RT "#" }' file
line 1: #hello#
line 2: # bro
#
line 3: #my na#
line 4: #m§
is#
line 5: # Jhon#
line 6: # Does#

以上使用 GNU awk 进行多字符 RS 和 RT。

关于linux - 如何使用awk读取每n个字符而不是每行的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35767460/

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