Text-Processing
在第一個 grep 結果後計算行中的字元,但從計數中刪除新行
問題:
我有多個文本文件 (.fas),如下所示:
文件 1.fas:
>species1 AICGICVIAGIAIYIAAICG >species2 AICGIVVYICAGAYICAGCG
文件 2.fas:
>species1 AIG >species2 GCI
我有興趣計算第二行中的字元數(一個文件中的所有物種都相同,因為它們是對齊的。
我目前的一個班輪:
for i in *.fas; do echo -n "$i," && grep -m 1 -A 1 '>' $i | tail -n 1 | wc -c; done;
這在一定程度上有效,但計算的數字比實際字元數高一個,因為它正在計算換行符。我該如何解決這個問題,所以它只計算不包括換行符的字元數?
電流輸出:
file1.fas,21 file2.fas,4
期望的輸出:
file1.fas,20 file2.fas,3
| wc -l
列印行數。| wc -c
列印字元數,包括換行符。| wc -lc
列印兩者(首先是行數)。所以你可以簡單地減去它們:(寫它而不是
|wc -c
)| wc -lc | awk '{print $2 - $1}'
如果您只在一行上列印您的序列,您可以減去 1 而不是換行符的數量。
或者你可以
awk
只使用,匹配整行併計算它的字元:| awk '{match("[A-Z]*");print RLENGTH}'
RLENGTH
是匹配的長度(這裡是整行)。在這裡,我假設您只使用大寫字母,否則,使用.
而不是[A-Z]
.在
vim
(文本編輯器,因此它可能與您的腳本不兼容)上,直覺地選擇您的區域(一行或多行)並執行::'<,'>s/[A-Z]*//gn
tr
您還可以使用(也適用於多行)刪除換行符:| tr -d '\n' | wc -c
順便說一句,可能還有很多其他方法可以做到這一點。