Linux Bash:如何缩短日志文件的长行,同时在每行的开头和结尾保留固定数量的字符?

Linux Bash:如何缩短日志文件的长行,同时在每行的开头和结尾保留固定数量的字符?,linux,bash,awk,Linux,Bash,Awk,我有一个长日志文件(ASCII文本),其中包含从一些字符到数千个字符不等长度的行。如何使用bash/linux命令缩短每一行? 是否可以用“…删除N个字符…”之类的内容替换剪切的文本 我的目标是保持所有长度不超过100个字符的行不变。 对于所有行>100个字符,从开始时保留40个字符,从结束时保留40个字符,并在字符已被删去的中间插入“……N个字符……”(n替换为删除字符的数目)。 这对于bash/linux命令来说太复杂了吗? 任何帮助都将不胜感激。awk营救:-) 我相信你的问题是:当你做像

我有一个长日志文件(ASCII文本),其中包含从一些字符到数千个字符不等长度的行。如何使用bash/linux命令缩短每一行? 是否可以用“…删除N个字符…”之类的内容替换剪切的文本

我的目标是保持所有长度不超过100个字符的行不变。 对于所有行>100个字符,从开始时保留40个字符,从结束时保留40个字符,并在字符已被删去的中间插入“……N个字符……”(n替换为删除字符的数目)。 这对于bash/linux命令来说太复杂了吗?
任何帮助都将不胜感激。

awk
营救:-)

我相信你的问题是:当你做像猫这样的事情时…|cut-c..,你怎么能在这上面附加一些东西呢

让我举一个例子:我有一个文件,
test.txt
,如下所示:

Prompt>cat test.txt
version = 1.203
RAM/ABC/INDIA
RAJ/XYZ/DELHI
VIRAJ/FDS/
我可以一个接一个地显示线条的不同部分,如下所示:

Prompt>cat test.txt | awk '{print substr($1,1,1) "..." substr($1,3,1)}'
// print the first character, some constant string in between, and the third character
这将产生以下结果:

v...r
R...M
R...J
V...R

因此,在
awk
脚本中把所有的东西放在一起,比如
{print}
就可以完成任务

我相信你的问题是:当你做像猫这样的事情时…|cut-c..,你怎么能在这上面附加一些东西呢

让我举一个例子:我有一个文件,
test.txt
,如下所示:

Prompt>cat test.txt
version = 1.203
RAM/ABC/INDIA
RAJ/XYZ/DELHI
VIRAJ/FDS/
我可以一个接一个地显示线条的不同部分,如下所示:

Prompt>cat test.txt | awk '{print substr($1,1,1) "..." substr($1,3,1)}'
// print the first character, some constant string in between, and the third character
这将产生以下结果:

v...r
R...M
R...J
V...R
因此,在
awk
脚本中把所有的东西放在一起,比如
{print}
就可以完成任务

概念证明 你可以用它来做这个

概念证明
谢谢,但是如何获取最后n个字符?行的长度各不相同。最后一个字符也可以使用
substr()
找到:当您不填写最后一个参数时,子字符串将被占用到最后一个字符。您需要字符串的长度来知道从何处开始,您可以使用
length()
函数找到该字符串。谢谢,但是如何获取最后n个字符呢?行的长度各不相同。最后一个字符也可以使用
substr()
找到:当您不填写最后一个参数时,子字符串将被占用到最后一个字符。您需要字符串的长度来知道从何处开始,可以使用
length()
函数找到该字符串。@Gernot实际上,我们都错了。我有一个off-by-1错误,应该是
l-39
。我在输出中添加了一行示例,说明这是correct@kvantour要求缩短的线路长度超过100条,而不是80条。另外,我们不确定
长度本身是否是非标准的,但似乎不是这样;更新的答案-该消息仍需要一个小的更正:删除了“…”l-80“字符…”。从示例的第一行中删除了31个字符。@Gernot Ah,看错了地方。抢手货fixed@Gernot事实上,我们都错了。我有一个off-by-1错误,应该是
l-39
。我在输出中添加了一行示例,说明这是correct@kvantour要求缩短的线路长度超过100条,而不是80条。另外,我们不确定
长度本身是否是非标准的,但似乎不是这样;更新的答案-该消息仍需要一个小的更正:删除了“…”l-80“字符…”。从示例的第一行中删除了31个字符。@Gernot Ah,看错了地方。很好的捕获,修正了一件需要注意的事情,对于101-107个字符长的行,结果行在108个字符长时会更长,因为
。。。已删除N个字符…
为28个字符。这是预期的。这样我可以更容易地找到缩短的线条。;-)需要注意的一点是,对于长度为101-107个字符的行,生成的行将更长,长度为108个字符,因为
。。。已删除N个字符…
为28个字符。这是预期的。这样我可以更容易地找到缩短的线条。;-)