行数がコマンドライン引数として指定されたファイルから単語を数えるのに興味深い問題があります。たとえば、入力テキストファイルに次のものがある場合 -
Unix is an OS
Linux is the child of Unix
Unix is fun.
End of File
実行するコマンドは次のとおりです。
bash test.sh unix.txt 3
文を含むテストファイルはどこにunix.txt
あり、3は単語数を数える行数です。答えは13です。
基本的なコマンドを試してみましたが、wc
どちらも正解を提示しませんでした。
だから私はforループを試しましたが、これらの行番号だけを取得する方法を指定することはできません。
答え1
head -n 3 unix.txt
ファイルの最初の3行をインポートしてから、次にパイプすることができます。wc
したがって、シェル変数に格納されているファイル名の場合$file
:
{ head -n 3 | wc -w; } < "$file"
または:
head -n 3 -- "$file" | wc -w
後者は、-
一部head
の実装で呼び出されたファイルに対して機能せず、ファイルを開くことができないときにエラーメッセージ(を介して)と共に出力されます0
。head
にあります。pipefail
答え2
また試み
awk -v"LNR=$2" 'NR > LNR {print SUM; exit} {SUM+=NF}' file
13
答え3
私たちはできますawk
awk '{print NF}' unix.txt
単語と行数
awk '{print NF" "$0}' unix.txt
行番号を含む単語数
awk '$0="line"NR": "NF' unix.txt
awk '$0="line"NR": "NF' unix.txt | grep line3
答え4
スクリプトには2つのパラメータがあります。
したがって、スクリプトでは次のように使用できます。
sed -n "/\w/{1,$2 p;}" $1 | wc -w
$1
ファイル名を含むファイルには、検索する$2
必要がある行の総数が含まれています。