uniq -c
cut
後で区別しにくいように、項目をスペースで区切りますawk
。
1000_A1\tB1\n
___1_A2\tB2\n
sed -r 's/^ *([0-9]+)/\1\t/'
区切り文字をタブに変更することでこの問題を解決できました。その後、cut -f1
次を返すことができます。
1000\tA1\tB1\n
1\tA2\tB2\n
uniq -c
しかし、タブを使用して数字を区切るのが一般的な使い方のようです。この機能が欠けているのはなぜですか?他のより簡単な方法がありますか?
答え1
あなたのフォーマットが似ているようで、入力が揃っていることを<number><space><field 1 name><tab><field 2 name>
確認したいと思いますfield 1 name
。必要に応じて、最初の数字部分を削除し、最初の列の残りの部分が揃っていることを確認してください。
echo "$input" | sed -r 's/^ *[^ ]+ //' | sort -c -k1,1
答え2
awk
数字を区別するのがなぜ難しいと思うのかわかりません。awk '{print $1}'
印刷に問題はありません。
$ sort file | uniq -c
5 x
10 y
$ sort file | uniq -c | awk '{print $1}'
5
10
$
答え3
カットを使うと簡単に取り外せます。ちょうどcut -d " " -f 1
番号を取得し、cut -d " " -f 2-
残りを得るためにそれを使用してください。 awkはスペースなので処理のみします。
答え4
データ列にスペースを含めることができる場合は、sed
タブを使用してスペースを置き換えることができます。
sed -e 's/<5 white space chars>//' | sed -e 's/<1 white space chars>/\t/'
最初のものはsed
switchによって生成された先行スペースを置き換え-c
、2番目は数と最初のデータ列の間のスペースを置き換えます。