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