` sort | uniq -c`をタブで区切って発生回数をどのように作成できますか?

` sort | uniq -c`をタブで区切って発生回数をどのように作成できますか?

uniq -ccut後で区別しにくいように、項目をスペースで区切ります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/'

最初のものはsedswitchによって生成された先行スペースを置き換え-c、2番目は数と最初のデータ列の間のスペースを置き換えます。

関連情報