簡體   English   中英

通過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 power工具在這方面會有所幫助,但是假設awk將是可以做到這一點的工具。

注意:我知道Python中的代碼可能最容易編寫關於此任務,我做了。 但是,我發現我的Python實現非常慢,因為要處理的字母字符串長達數萬個字符。 因此,我故意嘗試用bash工具解決這個問題。

$ awk 'NR==FNR{start=$1;lgth=$2;next} {print $1, substr($2,start,lgth)}' FS='-' file2 FS=' ' file1
a1 bcdefghijklmn
b27 bcdefghijklmn
c4 bcdefghijklmn

或者如果第二個字段是結束位置而不是長度:

$ awk 'NR==FNR{start=$1;lgth=$2-$1+1;next} {print $1, substr($2,start,lgth)}' FS='-' file2 FS=' ' file1
a1 bcdefghijklm
b27 bcdefghijklm
c4 bcdefghijklm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM