回答:
GNU awkソリューション:
awk -v FPAT='[^N[:space:]]' '{ print NF }' file
FPAT='[^N[:space:]]'
-フィールド値を定義するパターン(N
charと空白を除く任意の文字)予想される出力:
1
1
1
0
1
2
2
スペース文字以外の各行にカウントが必要であると想定し、 N
$ perl -lne 'print tr/N //c' ip.txt
1
1
1
0
1
2
2
tr
置き換えられた文字数ですc
指定された文字セットを補完する-l
オプションの使用に注意してください。入力行から改行文字を取り除き、1つずれたエラーを回避し、printステートメントに改行文字を追加します。
より一般的なソリューション
perl -lane 'print scalar grep {$_ ne "N"} @F' ip.txt
-a
@F
配列で保存された空白で入力行を自動的に分割するオプションgrep {$_ ne "N"} @F
@F
文字列と一致しないすべての要素の配列を返しますN
grep {!/^N$/} @F
scalar
、配列の要素数が得られます代替のawkソリューション:
awk '{ print gsub(/[^N[:space:]]/,"") }' file
gsub(...)
- gsub()
関数は、行われた置換の数を返します。出力:
1
1
1
0
1
2
2
tr
およびPOSIXシェルスクリプト:
tr -d 'N ' < file | while read x ; do echo ${#x} ; done
bash
、、ksh
およびzsh
:
while read x ; do x="${x//[ N]}" ; echo ${#x} ; done < file
awk '{print length()}'
より遅いシェルループを回避するために使用できますが、awk自体ですべて実行できます...
awk
シェルスクリプトで使用すると、このようなシステムが4つすべてでクロールされる可能性があります。一般に、同じレイテンシのドラッグは、ファームウェアが制限されているシステム、または高負荷のシステムに適用されます。
もう1つの簡単な方法は、Pythonでそれを行うことです。これは、ほとんどのUNIX環境にプリインストールされています。次のコードを.pyファイルにドロップします。
with open('geno') as f:
for line in f:
count = 0
for word in line.split():
if word != 'N':
count += 1
print(count)
そして次に:
python file.py
端末から。上記の内容は次のとおりです。
sed
気にしないものを置き換えたりawk
、残りの長さを数えたりするために使用sed 's/N//g ; s/\s//g' file | awk '{ print length($0); }'