标签: text-processing

如何以特定的列大小换行文本?

我知道我可以使用类似cat test.txt | pr -w 80将行换行至 80 个字符宽的方法,但这会在打印行的顶部和底部放置大量空间,并且在某些系统上无法正常工作

强制以特定宽度换行的长行文本文件的最佳方法是什么?

如果你能防止打断的话,加分。

text-processing

177
推荐指数
5
解决办法
10万
查看次数

使用 bash 从变量中删除特定字符

我想解析一个变量(在我的例子中它是开发工具包版本)以使其 dot( .) 免费。如果version='2.3.3',所需的输出是233

我尝试如下,但它需要.替换为另一个给我的字符2_3_3。如果tr . ''能奏效就好了。

  1 VERSION='2.3.3' 
  2 echo "2.3.3" | tr . _
Run Code Online (Sandbox Code Playgroud)

bash text-processing

173
推荐指数
6
解决办法
52万
查看次数

如何删除文本文件中的重复行?

我的一个巨大的(最多 2 GiB)文本文件包含其中每一行的大约 100 个精确副本(在我的情况下没用,因为该文件是一个类似 CSV 的数据表)。

我需要的是在保持原始序列顺序的同时删除所有重复(最好,但可以为了显着的性能提升而牺牲)。结果中的每一行都是唯一的。如果有 100 条相等的行(通常重复项分布在整个文件中并且不会是邻居),则只剩下一种。

我已经用 Scala 编写了一个程序(如果您不了解 Scala,请考虑使用 Java)来实现这一点。但也许有更快的 C 编写的本地工具能够更快地做到这一点?

更新:awk '!seen[$0]++' filename只要文件接近 2 GiB 或更小,该解决方案似乎对我来说很好用,但现在我要清理 8 GiB 文件,它不再起作用。在配备 4 GiB RAM 的 Mac 和配备 4 GiB RAM 和 6 GiB 交换的 64 位 Windows 7 PC 上,似乎无穷无尽,只是内存不足。鉴于这种经验,我并不热衷于在具有 4 GiB RAM 的 Linux 上尝试它。

large-files text-processing files

170
推荐指数
5
解决办法
23万
查看次数

仅返回匹配模式后的一行部分

因此,当我使用我正在处理的特定日志集时,拉开一个文件cat然后使用它grep来获取匹配的行只会让我走到这一步。它需要一种将行与模式匹配的方法,但仅在匹配后返回行的部分。比赛前后的部分将始终不同。我玩过使用sedor awk,但无法弄清楚如何过滤该行以在比赛前删除部分,或者在比赛后返回部分,两者都可以。这是我需要过滤的行的示例:

2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
Run Code Online (Sandbox Code Playgroud)

我需要的部分是“停滞”后的一切。

这背后的背景是我可以找出某些东西停顿的频率:

cat messages | grep stalled | wc -l
Run Code Online (Sandbox Code Playgroud)

我需要做的是找出某个节点停顿了多少次(由“停顿”之后每个冒号之前的部分表示。如果我只是为此(即 20 :)grep,它可能会返回软失败的行,但是没有停顿,这对我没有帮助。我只需要过滤停顿的部分,这样我就可以从那些停顿的节点中搜索特定节点。

出于所有意图和目的,这是一个带有标准 GNU 核心实用程序的 freebsd 系统,但我无法安装任何额外的东西来提供帮助。

grep sed text-processing

161
推荐指数
3
解决办法
57万
查看次数

如何从具有 1 TB 磁盘空间的系统上的 700 GB txt 文件中删除前 3 亿行?

如何从一个 700?GB 的文本文件中删除前 3 亿行,该系统的总磁盘空间为 1?TB,可用空间为 300?GB?(我的系统有 2?GB 的内存。)我找到的答案使用 sed、tail、head:

但我认为(请纠正我)我无法使用它们,因为磁盘空间被限制为 1?TB,并且它们在处理过程中生成一个新文件和/或有一个 tmp 文件。

该文件包含 JSON 格式的数据库记录。

text-processing

161
推荐指数
6
解决办法
9万
查看次数

如何使用 shell 命令删除 ascii 文件的前 n 行?

我有多个文件在前 5-10 行中包含 ascii 文本信息,然后是列表良好的矩阵信息。在 shell 脚本中,我想删除前几行文本,以便我可以在另一个程序中使用纯矩阵信息。如何使用 bash shell 命令来执行此操作?

如果有任何帮助,我正在使用 RedHat 和 Ubuntu linux 系统。

bash shell-script text-processing

147
推荐指数
4
解决办法
33万
查看次数

解码URL编码(百分比编码)

我想解码 URL 编码,是否有任何内置工具可以执行此操作,或者谁能为我提供sed可以执行此操作的代码?

我确实通过unix.stackexchange.com和互联网进行了一些搜索,但我找不到任何用于解码 url 编码的命令行工具。

我想要做的只是就地编辑txt文件,以便:

  • %21 变成 !
  • %23 变成 #
  • %24 变成 $
  • %26 变成 &
  • %27 变成 '
  • %28 变成 (
  • %29 变成 )

等等。

url sed shell-script text-processing

132
推荐指数
9
解决办法
13万
查看次数

将字节数转换为人类 KiB MiB 等的标准工具;喜欢 du, ls1

是否有标准工具可以将字节的整数计数转换为人类可读的最大可能单位大小计数,同时将数值保持在 1.00 和 1023.99 之间?

我有我自己的 bash/awk 脚本,但我正在寻找一个标准工具,它可以在许多/大多数发行版中找到......更普遍可用的东西,理想情况下有简单的命令行参数,和/或可以接受管道输入。

以下是我正在寻找的输出类型的一些示例。

    1    Byt  
  173.00 KiB  
   46.57 MiB  
    1.84 GiB  
   29.23 GiB  
  265.72 GiB  
    1.63 TiB  
Run Code Online (Sandbox Code Playgroud)

这是bytes-human脚本(用于上述输出)

awk -v pfix="$1" -v sfix="$2" 'BEGIN { 
      split( "Byt KiB MiB GiB TiB PiB", unit )
      uix = uct = length( unit )
      for( i=1; i<=uct; i++ ) val[i] = (2**(10*(i-1)))-1
   }{ if( int($1) == 0 ) uix = 1; else while( $1 < val[uix]+1 ) uix--
      num = $1 …
Run Code Online (Sandbox Code Playgroud)

utilities text-processing units

131
推荐指数
6
解决办法
6万
查看次数

如何将目录中的所有(文本)文件合并为一个?

我有 14 个文件都是一个文本的一部分。我想将它们合二为一。怎么做?

text-processing files

130
推荐指数
4
解决办法
34万
查看次数

在一个巨大的 (70GB)、一行、文本文件中替换字符串

我有一个巨大的(70GB)一行文本文件,我想替换其中的一个字符串(令牌)。我想<unk>用另一个虚拟令牌(手套问题)替换令牌。

我试过sed

sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但输出文件corpus.txt.new有零字节!

我也尝试过使用 perl:

perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但我遇到了内存不足错误。

对于较小的文件,上述两个命令都有效。

如何替换字符串是这样的文件? 是一个相关的问题,但没有一个答案对我有用。

编辑:如何将文件拆分为 10GB(或其他任何大小)的块并应用sed到其中的每一个然后将它们合并cat?那有意义吗?有没有更优雅的解决方案?

sed large-files text-processing

129
推荐指数
11
解决办法
3万
查看次数

标签 统计

text-processing ×10

sed ×3

bash ×2

files ×2

large-files ×2

shell-script ×2

grep ×1

units ×1

url ×1

utilities ×1