入力区切りファイルがあります。ファイルの実際のレコード数は4です。ただし、値のキャリッジリターン文字のため、合計数は8です。最初の列の値に基づいて行数を計算したいと思います。
答えは次のとおりです。4。
次のコマンドを試してみましたが、何も機能しませんでした。
grep -Eo '[0-9]+|' filename | sort -u | wc -l
awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); a[$1]} END{for (z in a) ++i; print i}' filename
awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); PRINT[$1]} END{for (z in a) ++i; print i}' filename
wc -l filename | sed 's/ *\([0-9]* \).*/\1/'
答え1
これは最も近いものです:
grep -Eo '[0-9]+|' filename | sort -u | wc -l
しかし目標を逃した
- 行の先頭に一致を固定しないでください。
- 照合順序/不要な重複排除
式を固定するには、"^"
パターンの先頭に式を入れて「|」をエスケープします(メタ文字であるため)。
grep -Eo '^[0-9]+\|' filename | sort -u | wc -l
Next - 廃棄sort -u
.grepは連続した行を無視し、追加情報を使用すると実際には重複していないいくつかの「重複」を削除するようです。
最後に、以下を削除しますwc -l
。POSIX grep-c
一致数を印刷するようにgrepに指示するオプションがあります。この-o
オプションを削除してください(必須ではありません)。だからあなたに必要なこと
grep -Ec '^[0-9]+\|' filename
答え2
これはうまくいくかもしれません
grep -c ^the desired string filename
wc -l thefile