[英]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.