通过 bash 工具从文本文件中提取列范围
Extracting column range from text file via bash tool
假设一个文本文件 (file1
) 包含多行字母字符串,每行前面都有一个用作条形码的短字母数字字符串。字母字符串的长度都是相同的,而前面的字母数字字符串则不同。字母和字母数字字符串在每行中由空格分隔。
$ cat file1
a1 abcdefghijklmnopqrstuvwxyz
b27 abcdefghijklmnopqrstuvwxyz
c4 abcdefghijklmnopqrstuvwxyz
假设第二个文件 (file2
) 包含有关列范围的信息。此范围始终小于字母字符串。
$ cat file2
2-13
我正在尝试开发 bash 代码,从 file1
中的字母字符串中提取 file2
中指定的列范围,同时保留条形码。
$ sought_command file1 file2
a1 bcdefghijklm
b27 bcdefghijklm
c4 bcdefghijklm
我不确定哪种 bash 电动工具在这方面会有所帮助,但假设 awk
将是可以做到这一点的工具。
注意:我知道 Python 中的代码可能最容易编写关于此任务的代码,我也这样做了。但是,我发现我的 Python 实现速度慢得离谱,因为要处理的字母字符串有数万个字符长。因此,我特意尝试使用 bash 工具来解决这个问题。
$ awk 'NR==FNR{start=;lgth=;next} {print , substr(,start,lgth)}' FS='-' file2 FS=' ' file1
a1 bcdefghijklmn
b27 bcdefghijklmn
c4 bcdefghijklmn
或者如果第二个字段是结束位置而不是长度:
$ awk 'NR==FNR{start=;lgth=-+1;next} {print , substr(,start,lgth)}' FS='-' file2 FS=' ' file1
a1 bcdefghijklm
b27 bcdefghijklm
c4 bcdefghijklm
假设一个文本文件 (file1
) 包含多行字母字符串,每行前面都有一个用作条形码的短字母数字字符串。字母字符串的长度都是相同的,而前面的字母数字字符串则不同。字母和字母数字字符串在每行中由空格分隔。
$ cat file1
a1 abcdefghijklmnopqrstuvwxyz
b27 abcdefghijklmnopqrstuvwxyz
c4 abcdefghijklmnopqrstuvwxyz
假设第二个文件 (file2
) 包含有关列范围的信息。此范围始终小于字母字符串。
$ cat file2
2-13
我正在尝试开发 bash 代码,从 file1
中的字母字符串中提取 file2
中指定的列范围,同时保留条形码。
$ sought_command file1 file2
a1 bcdefghijklm
b27 bcdefghijklm
c4 bcdefghijklm
我不确定哪种 bash 电动工具在这方面会有所帮助,但假设 awk
将是可以做到这一点的工具。
注意:我知道 Python 中的代码可能最容易编写关于此任务的代码,我也这样做了。但是,我发现我的 Python 实现速度慢得离谱,因为要处理的字母字符串有数万个字符长。因此,我特意尝试使用 bash 工具来解决这个问题。
$ awk 'NR==FNR{start=;lgth=;next} {print , substr(,start,lgth)}' FS='-' file2 FS=' ' file1
a1 bcdefghijklmn
b27 bcdefghijklmn
c4 bcdefghijklmn
或者如果第二个字段是结束位置而不是长度:
$ awk 'NR==FNR{start=;lgth=-+1;next} {print , substr(,start,lgth)}' FS='-' file2 FS=' ' file1
a1 bcdefghijklm
b27 bcdefghijklm
c4 bcdefghijklm