标签: text-processing

使用Awk处理每个记录具有不同固定宽度字段的文件

我有遗留系统的一些数据文件,我想用Awk处理.每个文件都包含一个记录列表.有几种不同的记录类型,每种记录类型都有一组不同的固定宽度字段(没有字段分隔符).记录的前两个字符表示类型,然后您可以知道应该遵循哪些字段.文件可能如下所示:

AAField1Field2LongerField3
BBField4Field5Field6VeryVeryLongField7Field8
CCField99
Run Code Online (Sandbox Code Playgroud)

使用Gawk我可以设置FIELDWIDTHS,但这适用于整个文件(除非我在某个记录的基础上缺少某种方式设置它),或者我可以将FS设置为""并处理文件中的一个字符一段时间,但这有点麻烦.

有没有一种使用Awk从这样的文件中提取字段的好方法?

编辑:是的,我可以使用Perl(或其他).我仍然很想知道是否有一种合理的方法可以用Awk做到这一点.

unix linux awk text-processing gawk

3
推荐指数
2
解决办法
3412
查看次数

在 PHP 中拆分文本文件

如何使用 PHP 按字符数将大文本文件拆分为单独的文件?因此,每 1000 个字符拆分的 10,000 个字符文件将拆分为 10 个文件。此外,我可以在找到句号后才拆分吗?

谢谢。

更新 1:我喜欢 zombats 代码,我删除了一些错误并提出了以下内容,但有没有人知道如何仅在句号后拆分?

$i = 1;
    $fp = fopen("test.txt", "r");
    while(! feof($fp)) {
        $contents = fread($fp,1000);
        file_put_contents('new_file_'.$i.'.txt', $contents);
        $i++;
    }
Run Code Online (Sandbox Code Playgroud)

更新 2:我接受了 zombats 的建议并将代码修改为下面的代码,它似乎有效-

$i = 1;
    $fp = fopen("test.txt", "r");
    while(! feof($fp)) {
        $contents = fread($fp,20000);
        $contents .= stream_get_line($fp,1000,".");
        $contents .=".";

        file_put_contents("Split/".$tname."/"."new_file_".$i.".txt", $contents);
        $i++;
    }
Run Code Online (Sandbox Code Playgroud)

php string text-processing

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

从文本文件中解析项目

我有一个文本文件,其中包含{[]}标记内的数据.解析该数据的建议方法是什么,以便我可以只使用标签内的数据?

示例文本文件如下所示:

'这是一堆在任何{[way]}中都没有{[really]}有用的文本.我需要{[get]}一些项目{[from]}."

我想在列表中以"真实","方式","获取","来自"结束.我想我可以用split来做它..但似乎可能有更好的方法.我看过很多解析库,有没有一个对我想做的事情很完美?

python string text-processing

3
推荐指数
1
解决办法
786
查看次数

如何计算两个文本/字符串之间的相似度或差异百分比?

进一步解释一下

假设我有两个如下所示的字符串

我是一个会飞的超级男孩!真的 。

我是能打破墙壁的超级男孩!真的 。

所以有些字符是相似的I am super boy who canReally .。是否有任何东西可以用来查找这两个字符串之间的百分比相似性/差异。

php string text-processing

3
推荐指数
1
解决办法
4495
查看次数

在包含单个列值的多个文件中查找公共值

我有100个文本文件,每个文件包含单个列.文件如下:

file1.txt
10032
19873
18326

file2.txt
10032
19873
11254

file3.txt
15478
10032
11254
Run Code Online (Sandbox Code Playgroud)

等等.每个文件的大小不同.请告诉我如何找到所有这100个文件中常见的数字.

相同的数字在1个文件中只出现一次.

awk text-processing comm

3
推荐指数
1
解决办法
579
查看次数

Mac 终端中的 cut 命令缺少补足选项

根据cut 命令缺少 --complement 选项。关于如何获得这个有什么建议吗?

我需要这个,因为 Linux sh 支持它

我的问题与此非常相似,所以我尝试按照以下方法使其工作

#!/bin/sh
EXTRA=$@
REST=`echo $EXTRA | cut -d ' ' --complement -s -f1`
echo $REST
Run Code Online (Sandbox Code Playgroud)

有任何建议欢迎提出

PS:我不能使用 bash 代替 sh

unix macos text-processing cut sh

3
推荐指数
1
解决办法
7281
查看次数

使用sed在两个斜杠之间提取字符串

我正在尝试使用 sed 从文件中的一行中提取特定字符串。目前我正在使用 while 循环读取文件并搜索特定字符串。当找到该字符串时,我正在提取它,但是我需要使用 sed 来解析输出,以便我只获取两个斜杠之间的字符串(它是一个目录名,所以如果可能的话,我需要同时保留开头和结尾的斜杠)。这是我正在运行以搜索文件的循环:

#!/bin/sh
file=configFile.conf
while read line 
do
    if  echo "$line" | grep -q "directory_root" 
    then DIR_ROOT="$line"
fi
done < "$file"
echo $DIR_ROOT
exit 0
Run Code Online (Sandbox Code Playgroud)

while 循环起作用并回显以下字符串:

directory_root /root/config/data/
Run Code Online (Sandbox Code Playgroud)

然后我需要使用 sed 以获得以下输出,以便将正确的目录名称传递给另一个脚本:

/root/
Run Code Online (Sandbox Code Playgroud)

是否可以使用 sed 和正则表达式从回显输出中仅提取上述内容?

谢谢

regex bash shell text-processing sed

3
推荐指数
1
解决办法
3015
查看次数

替换 txt 文件中每一行匹配文本的第一个实例

我有一个 .txt 文件,我想替换每一行第一次出现的匹配字符串。

例如,下面是 foo.txt 中的内容:

838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76  /Volumes/Documents - Part 1/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997  /Volumes/Documents - Part 1/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
f3d0ea2d775cf8edc1ddbd76e2562d3e4a2e281fe2aeb1333ef99536d1a180ee  /Volumes/Documents - Part 1/manuals/dryer.pdf
\ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\{2}:`!*?$(){}[]<>|-=+% [meowzers] (1)~^^.$[E-frLOL[MAY[]{}()?<NUL>
\9c993445f7f6216b4fc7d35aef47afa16f4f831f2510b7fddd1e42c4cafb518c  /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\:`!CAT      MEOW!!![hey]{15}(hello)@$%&^*(#@@*?$(){}[]<>|-=+% ~^^.$[E-frLOL[MAY[]{}()?<NUL>
Run Code Online (Sandbox Code Playgroud)

我要替换Documents - Part 1Documents - Part 1 BU只有在每一行的第一次出现。

所以,它最终看起来像这样:

838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76  /Volumes/Documents - Part 1 BU/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997  /Volumes/Documents - Part 1 BU/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - …
Run Code Online (Sandbox Code Playgroud)

macos bash grep text-processing sed

3
推荐指数
1
解决办法
534
查看次数

查找两个文件之间的唯一行

我有两个非常大的文件(文件 1 和文件 2),文件 1 有很多行和列,为了简单起见,我粘贴了第 1 列。我只想打印文件 1 特有的那些行。

文件一:

AT1G01010.1
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
AT1G01046.1
AT1G01050_ID7
Run Code Online (Sandbox Code Playgroud)

文件2:

AT1G01010
AT1G01046
AT1G01050
Run Code Online (Sandbox Code Playgroud)

输出:

AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 中尝试过comm命令,但它不起作用,因为它检查完整的模式。因此,当它尝试检查时,AT1G01010.1AT1G01010不会显示任何常见内容。

text-processing unique comm

3
推荐指数
1
解决办法
3318
查看次数

读取固定宽度数据时保留空白列并添加分隔符

我正在解析一个文件。

文件格式是这样的:


Column1  Column2  Column3  Column4  Column5
1        2        3        4        5
6        7                 8        9
10       11       12                14
         15       16       17       18

Run Code Online (Sandbox Code Playgroud)

一些列是空的。所以我正在读取与上述格式相同的两个文件并合并这两个文件并添加“|” 每列之间,所以它应该是这样的:


Column1 | Column2 | Column3 | Column4 | Column5
1       | 2       | 3       | 4       | 5
6       | 7       |         | 8       | 9
10      | 11      | 12      |         | 14
        | 15      | 16      | 17      | 18

Run Code Online (Sandbox Code Playgroud)

但我越来越像这样。列中的空格被删除。


Column1 | Column2 | Column3 | Column4 | Column5
1       | …
Run Code Online (Sandbox Code Playgroud)

perl text-processing

3
推荐指数
1
解决办法
103
查看次数

标签 统计

text-processing ×10

string ×3

awk ×2

bash ×2

comm ×2

macos ×2

php ×2

sed ×2

unix ×2

cut ×1

gawk ×1

grep ×1

linux ×1

perl ×1

python ×1

regex ×1

sh ×1

shell ×1

unique ×1