• ベストアンサー

awkで最後の列だけ除外する方法

「awkのみ」で最後の列だけを区切り文字も含めて除外するのに、スマートな方法は無いでしょうか? x1,x2,x3,…,x98,x99,x100 を x1,x2,x3,…,x98,x99 とする方法です。 $ awk {$100="";print $0} だと最後のカンマが残りますし、かといってprint $1, $2,…$98, $99 はダサいのでやめたいのですが・・・

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

BEGIN{FS=OFS=","} {NF--;print} かな。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

例えば { sub(/,[^,]*$/, ""); print $0 } でいかない? awk じゃなくて sed なら sed -e 's/,[^,]*$//' だけだけどね.

関連するQ&A

  • unix awkコマンド 複数区切り

    カンマ2つ(,,)+文字の抽出方法がわかりません・・・。 例: ファイル内(下記2行)に対して 12,34,,567@89 1,2,34,,567@89 1行目2行目ともに「567」が表示したいです。 # ”カンマ2つを一つの文字列”だけだと「awk -F",,"」でいけますが、+文字列がどうやってもできません。。

  • awkで可変文字列をマッチング

    シェルなどでawkを使う際に、シェルの引数として渡された文字列をawkに渡し、それを条件にマッチングをかけたいのですが、どうしたら良いのでしょうか?(まあ、素直にgrepを使えばいいのですが・・・) 例えば、 cat foo.txt | awk '{if ($2 == ptn) print}' ptn=$<シェルの引数> とかやれば、2番目のフィールドに完全に一致する行が抽出できるのですが、 cat foo.txt | awk '/ptn/ {print}' ptn=$<シェルの引数> とかやっても、"ptn"という文字列をマッチングしてしまうので、うまくいきません。どの位置に出現するかわからないけど、シェルの引数で指定された文字列が含まれている行だけを出力したい場合、どうしたらよいのでしょう・・・。

  • エクセル:セル内の文字列の最後の「,]を消したい。

    エクセル:セル内の文字列の最後の「,]を消したい。 以下のように、数字(1桁または2桁)がカンマでわかれたデータがあります。 この文字列の中で、一番最後の「,」だけ消したいのですが、 何か良い方法はないでしょうか。 1,1,1,1, ⇒最後のカンマを消したい 1,2,3,4  ⇒カンマがないのでそのままでOK 1,1,2,3,4  1,2,3,   1,11,12,

  • awk等で特定文字列の抜き出し

    次のような文字列から特定の文字を抽出したいです。 「xxx,yyyyy,zz」 で、yyyyの部分のみをコマンドラインから抽出したいのですがどのようにしたらよいでしょうか? ためしに自分で考えたコマンドは以下の通りです。 % echo "xxx,yyyyy,zz" | awk '{print substr($0, 1, index($0, ","))}' で行うと最初の「,」でなりxしか抽出できません。 すみませんが、いい方法がありましたら教えて下さい。

  • awk等で、CSVに任意の列を追加する方法

    こんにちは。 awkやsedなどで、データが並んだCSVファイルの任意の列に 1列データ(追加の列に入るデータは固定)を入れたいのですが、 良い方法は無いでしょうか? 下記のように x00,x01,・・・x49,x50・・・x98,x99 y00,y01,・・・y49,y50・・・y98,y99 を x00,x01,・・・x49,[追加列],x50・・・x98,x99 y00,y01,・・・y49,[追加列],y50・・・y98,y99 というように入れられるようにしたいです。 列の量は100項目程度あるのですが、大量の変数を使用しないことが条件です。 要は、awkの中に$1. $2, $3・・・$100というように変数をベタ書きしない方法でお願いいたします。

  • awk で右端の文字を1文字削除したい

    awkで、文字列の最後に特定の文字があったときにそれを削除するというものを作ろうと思います。 最後の文字が何であるかを調べるには、lengthで文字列の長さを調べてから、substrを使えば調べられると思うのですが、その文字を削除する方法がわかりません。文字列のx文字目までを取得する、あるいは、x文字目の文字を置換する(この場合ヌルに)という操作ができれば良いと思うのですが、それらしい文字列関数が無いように思います。どのような操作をするべきなのでしょうか? 環境は、Windows98でgawk32を使っています。

  • 文字列の一部を取り除きたい(awk?)

    こんにちわ。 下記の文字列操作を行いたいのですが上手くいきません。 どなたか教えて下さい。 環境OSはsolarisです。 awkにはこだわりません。 ・最初の2文字を取り除く ・最後の文字が"2"の場合取り除く 例 yoroshikune → roshikune onegai2 → egai

  • awkについて

    awkについて 今とあるファイルの/var/tmp/test 中の検索についてawkを使用しています。 123 abc 123-m 333 aaa-xx 1qwoko などタブキーで区切られています。 cat /var/tmp/test grep 123 | awk '$=="123"{print $2}' とやった場合存在するので 結果がでるのですが、その結果がない場合"NG"など文字列を出したいのですがどうすればいいでしょうか?

  • awkコマンドに引数を渡す方法

    awkコマンドに対して引数を渡す方法が知りたいです。 例えば以下のようなリストファイルがあったとします。 --------------------------------------- % cat test.lst 454 100 37536 200 32432 300 34q2 400 --------------------------------------- そこで以下のシェルを実行すると --------------------------------------- #!/bin/sh for VAL in 100 200 300 do CNT=`cat test.lst | awk '$2 == $VAL {print $1}'` echo "$VAL : $CNT" done --------------------------------------- awkコマンド内の$VALが引数ではなく文字列として認識されてしまうため、 出力結果が 100 : 200 : 300 : となってしまいます。 100 : 454 200 : 37536 300 : 32432 という結果を出力したい場合(awk内の引数を有効にする場合)どうすればよいでしょうか? awkを使用しない方法もあるかと思いますが、今回はawkを使った方法を知りたいです。 宜しくお願い致します。

  • PowerShellの繰り返し処理の最後だけを

    PowerShell 3.0を使用しています。 for文における、前処理と後処理は可能なものでしょうか? for文で、「末尾にカンマ(,)のついた文字列」を繰り返し連結して行き、最後だけは「末尾にカンマを除外した文字列」を連結して変数に入れたいのですが、そもそも可能でしょうか? 現状、for文から抜けた後にその変数の「行末のカンマを削る」というやり方でなんとかなっているのですが、 美しくないので解決方法があればご教示下さい。 ENDとBEGINは関数内では使用することができるのですが、forではそれに相当するものが見当たりません。

専門家に質問してみよう