• ベストアンサー

unixコマンドについて

ユニークカウント uniq -c とすると、 カウント数<スペース>カウント対象物 例)  10 ○○△△   9 ○□ ・・・ というデザインで出力されると思いますが、 この カウント数とカウント対象物の間のスペースをタブ区切りに変更するもっとも簡単なコマンドを教えてください。 なお、カウント対象物の中にもスペースが含まれており、そのスペースはタブ区切りにしたくはないので、あくまでも、カウント数とカウント対象物の間だけを変換したいのです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.2

こんな感じでしょうか。 … | uniq -c | sed 's/^ *//;s/ /\t/'

1204533
質問者

お礼

ファイルにミスがあり、再度実施しましたところ、うまくいきました。ありがとうございます。

1204533
質問者

補足

これで実装すると、カウント対象物内のはじめのスペースもタブ区切りになってしまいました。これでは うまくいかないようです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4852/10266)
回答No.3

空白があって数字が続いた直後の空白をタブに。 ~~ | uniq -c | sed 's/\( *[0-9]*\) /\1\t/' 先頭の空白を削除するなら、 ~~ | uniq -c | sed 's/ *\([0-9]*\) /\1\t/'

1204533
質問者

お礼

このやり方でもうまくいきました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

行頭 0個以上のスペースの列 1個以上の数字の列 1つのスペース を (0個以上のスペースの列 1個以上の数字の列 までを元の行から ) 1つのタブ に置換すればいい。 シェルによってはタブ文字入れるのが面倒だったりするだけで、あとはsedでできる。

1204533
質問者

お礼

ありがとうございます。考え方は理解できましたが、この処理を簡単に実行するにはどうしたらよいか 悩んでおります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【UNIX】echoコマンドのタブがずれる

    solaris環境(SunOS 5.10)で日本語を含む文字列を標準出力させた際に、タブの位置が1バイト分後ろにずれてしまいます。 ◼︎コマンド (1)echo ”あ¥ta” (2)echo ”aa¥ta” ◼︎出力結果 ※スマホから入力しているため、空白を△として表記させて頂きます。 どちらもタブ一つ分の入力しかしていません。 (1)あ△△△△△a (2)aa△△△△a (1)について、出力結果が想定より1バイト分後ろにずれて出力される。 (2)の位置からaが始まるのが理想なのですが、原因などわからないでしょうか。 実際にやりたいのは、日本語とタブを複数含む文字列を標準出力させた後、日本語を含まない複数のタブを含む文字列を何行か標準出力させて、区切り位置を綺麗に見せたいです。 全然関係ないかもしれないですが、環境変数は下記のようになっています。 LANG=ja_JP.PCK SHELL=/sbin/sh 宜しくお願い致します。

  • lsコマンドについて。

    lsコマンドについて。 $lsを実行したときに、結果は各ファイル名が改行で区切られて出力されると思うのですが、コンソールにはスペースかタブで区切られているように表示されます。 これはシェルがlsコマンドの結果に含まれる改行をスペースなどに変えてコンソールに出力しているからなのでしょうか。 よろしくお願いします

  • UNIX標準出力で表示されるタブの幅について

    UNIX標準出力で表示されるタブの幅について 標準出力で表示されるタブの幅がデフォルトで8に設定されているのですが、 これを変更することはできないでしょうか? Cソースなどをタブの幅4でインデントを揃えているのですが このCソースをdiffコマンドなどで標準出力に出力すると タブが自動的に8で表示されてしまい非常に見づらいので 変更する方法を調べているのですが、さっぱりわかりません。 どなたかご存知の方いらっしゃいませんでしょうか? ちなみにシェルはcshです。 宜しくお願いいたします。

  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。

  • コマンドラインから配列データ入力方法

    c++でコマンドラインから2次元配列データを入力する方法を教えてください。 1次元だとスペース区切りで出来ます。 2次元はどういう記号をどう使えば区切りを入力できますか?

  • SQL コマンド

    データの変換するコマンドを教えてください A|B ==== 1|A 2|B 3|C 4|A 5|D 6|A 7|D というテーブル内容を以下のように出力したいです。 だれがよいコマンドを教えてくださいませんか。 A B C D 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1

  • コマンドプロンプトのファイル指定

    ImageMagick初心者です。 ImageMagickという画像変換ソフトを使って「BMP画像」を「4bit グレースケールPNG画像」に変換しようとと思っています。 変換する際に、コマンドプロンプトでコマンドを入力して、変換対象のファイルを指定しようとしたのですが、ファイル名に半角スペースが含まれていて、正しく実行できません。 変換対象:「Tombo village.bmp」 出力対象:「Test.png」 ファイル名を変更する以外に変換する方法はないでしょうか? あと、ImageMagickで一度の操作で大量のファイルを変換するようなコマンドってありますか? 誰か教えてください! ■コマンドプロンプト実行結果■ C:\Users\[User Name]\Pictures\Folder>convert -colorspace gray -depth 4 Tombo village.bmp Test.png convert.exe: unable to open image `Tombo': No such file or directory @ error/blob.c/OpenBlob/2641. convert.exe: no decode delegate for this image format `Tombo' @ error/constitute.c/ReadImage/550. convert.exe: unable to open image `village': No such file or directory @ error/blob.c/OpenBlob/2641. convert.exe: no decode delegate for this image format `village' @ error/constitute.c/ReadImage/550. convert.exe: unable to open image `letters.bmp': No such file or directory @ error/blob.c/OpenBlob/2641. convert.exe: no images defined `Test.png' @ error/convert.c/ConvertImageCommand/3068. -------------------------となります。

  • UNIXシェルでこんな事がしたいのですが。

    元ファイルとして yyyymmdd hhmmss $string1 $string2 $string3 $string4 $string5 $string6 のように、8項目が半角スペースで区切られているログファイルがあります。 このログファイルを以下の規則に則って変換したい。 1)この半角スペースをタブに変換したい 2)ただし、yyyymmdd-hhmmss間と$String5-$String6間の半角スペースはそのまま半角スペースとしておきたい 3)変換後のファイルにおいて、yyyymmddの前に$String0として任意の文字列を挿入したい できればPerlを使用せず、bashだけで行いたいと思っています。 よろしくお願いします。

  • VB2005で重複件数を調べたい

    VB初心者ですがUNIXコマンドの『uniq -c』のような重複件数を 出力して重複行を1行だけ出力したいのですがどう書けばよいのでしょうか? 【DATA】 3010 3020 3010 3011 3010 【処理結果】 3010,3 3011,1 3020,1 ご教授おねがいします。

  • gawkでのタブ出力

    gawkで、1行に2つのカラムに分けて出力をしようとして、 print "foo", "bar"; と書くと、結果は、 foo bar というように、foo と bar の間にスペースが何個か入ってしまいました。 この出力を cut -f2 のようにして特定のカラムを取り出したり、Excelに直接貼り付けたり(タブ区切りは貼り付けが便利です)したいので、 スペースでカラムの縦がそろうだけでは意味がなく、タブが入ってほしいのです。 print "foo" "\t" "bar"; と、明示的にタブを指定しても同じ結果でした。 gawkでタブを出力するには、どうすればよいのでしょう?