sed、awk、grep、および wc を使用して bash ループをフォーマットする方法

sed、awk、grep、および wc を使用して bash ループをフォーマットする方法

そのため、特定の行を抽出し、特定の列で数の発生回数を数える必要があるテキストファイルがあります。このファイルは約100個あります。ステップごとに実行できますが、bash / kshを使用して実行したいと思います。

foreach i *h3
sed '4p;55p;77q;d' $i >> output.txt
end 

^^^^これにより、各h3ファイルから必要な行だけが抽出されます。

awk '{print $6}' output.txt | grep 'P2' | wc -l

^^^output.txtから列6のみを抽出し、列6にP2が何回表示されるかを計算します。

これらすべてをbash / kshスクリプトに結合する方法はありますか?

ベストアンサー1

私が正しく理解した場合:

  • 複数のファイル(* h3という名前)のうち4、55、77行の6番目のフィールドにある「P2」を何回計算しますか?

awkを使用してこれを行うことができます。

awk '
( FNR==4 || FNR==55 || FNR==77 ) {
    if ( $6 ~ "P2" ) { occurence++ } 
}
END {
    printf "There was: %d P2 ", occurence
    printf " among the 6th field on lines 4,55 or 77 of the *h3 files\n"
}' *h3

注:正確な一致が必要な場合は、(例で使用したようにgrepの代わりに:とその変形も一致するように)$6 ~ "P2"に変更してください。$6 == "P2"somethingP2otherthing

FNR = ファイル内レコード数 = 現在のファイルの行数 (つまり、各ファイルの最初の行は 1 から再開)

(NR =開始後(現在のファイルの開始以降ではありません))読み取られた(合計)数またはレコードであるため、ここでは機能しません。

おすすめ記事