- ベストアンサー
awkで列指定をして削除
awkかsedを利用して以下のファイルを処理したいです。 1 2 3 4 5 2 1 3 4 5 1 2 3 4 5 3 1 3 4 5 一列目の値が1の行のみ削除したいです。 2 1 3 4 5 3 1 3 4 5 こんな感じです。 実際に処理するファイルは膨大な行数ががあるためprintでは難しいです。 よろしくお願いします。
- macdoc
- お礼率30% (7/23)
- その他(プログラミング・開発)
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1さんの回答だと、「行頭の文字が1の行を除外」なので、質問とはちょっと違うような。 awk '$1!="1" ' 元ファイル > 修正後ファイル
その他の回答 (2)
- dscripty
- ベストアンサー率51% (166/325)
[ANo.2] さんが awk だから sed で! sed '/^[ \t]*1[ \t]/d /^[ \t]*1$/d' 元ファイル > 修正後ファイル sed の正規表現って表現力乏しい。。。
お礼
ありがとうございます。
- korimoto5
- ベストアンサー率0% (0/1)
該当行を削除した状態を別ファイルに出力するなら以下のコマンドでできます。 # awk '$1 !~/^1/{print}' input_file > output_file コマンドを毎回打つのがめんどい場合はawkの構文をファイル(hoge.awk)に書いて以下で実行 # awk -f hoge.awk input_file > output_file これで答えになってるでしょうか? 因みに以下のようにgrepコマンドでも同じことができますが入力ファイルの行数が数万行以上とかの場合はawkの方が早いと思います。 # grep -v ^1 input_file
関連するQ&A
- awkについて
awkの勉強を始めました。入力ファイルから特定の行を抜き出し、平均値を求めようとしています。しかし、FNRとはファイルの全行のようで、FNRで割ると正しい値になりません。特定の文字($8="abc")の行だけ抜き出しているので行数は全体より小さいのですが、抜き出した行数で割るにはどうすればよいのでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- awkで特定の範囲の行を削除したい
awkなどの使い方がよくわからないので教えてください。 あるテキストファイル中の、"del_start" という文字が入った行から"del_end" という文字が入った行までの全ての行を削除したファイルを作るシェルを作成したいと思っています。 awk(やsed、grep、cat ?)などを使って実現するにはどうすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- awkでデリミタを変更したいです。
以下のファイルtestを 1111:2222:3333:4444 5555:6666:7777:8888 ↓ 1111,2222,3333,4444 5555,6666,7777,8888 にしてみたいです。 awk -F":" 'BEGIN{OFS=","}{ print }' test などとためしてみたのですがうまくいきません。 ご教示下さい。内容はsedですぐできるんですね、、。
- ベストアンサー
- その他(プログラミング・開発)
- awkで単語単位での置換
awkを使って単語単位の置換を行いたいのですが、うまく行きません。 awkで単語単位で置換を行うのにはどの様にすれば宜しいのでしょうか? 何方かご存知の方いらっしゃいましたらご教授願います。 具体的にはsedの以下のコマンドと同等の事をawkで行いたいと思っています。 sed 's/\b置換前の単語\b/置換後の単語/g' 例: ・ファイルの内容 hogehoge abcdefg hogehoge hogehoge bcdef hogehoge hogehoge bcd hogehoge hogehoge abcd hogehoge hogehoge bcd hogehoge bcdef bcd hogehoge 上記ファイルをawkで1行ずつ読み込みの3,5,7行目の”bcd”のみ”HIJ”に置き換える事をしたいと考えています。 下記を試してみたのですが、うまく行きませんでした。 1.awk '{gsub(/\bbcd\b/, "HIJ", $0); print $0}' 2.awk '{gsub(/(bcd)/, "HIJ", $0); print $0}' 1だと全く置換されず、2だと3,5,7行目以外も置換されてしまいます。 どの様にしたらうまく行くのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- awkとsedはセットで覚えたほうがいいですか?
仕事でときおりテキストファイルを加工することがあります。 最近awkを初めて使い簡単に処理できることが実感できました。 awkの本を探して調べていたら、「sed & awkプログラミング 改訂版」 を発見し、タイトルにsedとawkとあるので、"awkとsedはセット"なのかと かんじました。 awkを勉強するならsedも一緒に覚えたほうがいいのでしょうか?
- ベストアンサー
- Linux系OS
- awkのセパレータ指定について
awkのセパレータ指定について教えてください。 以下のようなファイルがありそれを'||'区切りで出力したいです。 下記のような指定をしてみたのですが、 うまくいきませんでした。 cat text | awk -F '||' '{print $1}' [test.txt] aaa||bbb||ccc [期待する結果] print $1 → aaa print $2 → bbb print $3 → ccc どなたか教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- awk の使い方
sample.txt ファイルには "中村" "08/01/80" "03.1234.5678" "木村" "08/01/81" "06.1252.2536" のような情報があります。 そこの3番フィールドが電話番号ですので、awkで検索しようと思っています。 それで、 awk -v ARGU="$NUM" ' { VAR=substr($3,2,(length($3)-2)) if ( ARGU == VAR ) {print} }' /sample.txt のようにして、検索をかけようとしましたが、できません。 どこが間違っているのか教えてください。 awkの他の方法があるとか、違うもの(sed or grep)でできるのであれば、お願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- [awk]2つのファイルを参照して1つのファイルに出力する方法
最近プログラミング(シェル、awk)を始めた者です。 かなり大まかなものは作れるようになったのですが、急遽、大規模なデータ整理を行わないといけなくなってしまったため、皆さんの知恵を貸していただきたく質問いたしましたm(_ _)m 以下に示すような2つのファイルがあります。 (file1) (file2) 1 6 1 1 2 10 11 2 3 2 3 5 7 8 3 5 3 6 2 12 13 4 1 4 9 4 5 19 5 2 5 10 19 1 5 6 4 6 4 8 2 9 file1を上から1行ずつ順に読んでいき、2列目の値と同じものをfile2の1列目から探します。合致したところで、file2の合致した行の2列目以降を行番号を付けて表示するというものです。 (「file1の2列目の値=file2の1列目の値」を探し、file2の合致行の値を出力。) 上記ファイルですと、結果的に 1 4 8 2 9 2 6 2 12 13 3 10 19 1 5 4 1 2 10 11 5 3 5 7 8 6 9 4 5 19 という具合になります。 2つのファイルの行数は同じではなく、また、両ファイルとも1列目が行番号というだけで、他の列の値に規則性はありません。 file2の行数は100万以上の大規模なものになります。 自分が作ったものを掲載できればよかったのですが、あいにく会社のPC内にありまして、持ち出しできないため、掲載できません。 動作環境はLinux(RedHat)になります。 他のプログラミング言語についてはまだ分からないため、awkもしくはシェルでお願いいたします。
- 締切済み
- その他(プログラミング・開発)
- sed,awkでのデータ抽出方法
教えてください。 awk,sed,シェルを使い、カンマ区切りのファイルの1カラム目と2カラム目をキーに、 あるファイルに含まれる行を削除するにはどうすればよいのでしょうか? 例) --aaa.csv-- 111,222,333,444 555,666,777,888 999,000,111,222 --file1.txt-- 111222 555666 の場合、aaa.csvより下記行のみほしい。 999,000,111,222 ご存知でしたら、ご教授ください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- awkでのsh処理について
HP-UX環境、UNIXです。 1行目の11カラム目にOUTが含まれているかつ2行目の11カラム目にINが含まれている行だけ ファイルに出力するという処理を以下のように考えたんですが、うまくいきません。 awk'{m == NR % 2} m==1{if($11~ "OUT")} && m==0{if($11~ "IN") print $0} ' [ファイル名] 文法的に誤っていますでしょうか?? 回答宜しくお願い致します。
- ベストアンサー
- CGI
お礼
ありがとうございます。 awkで「!」の使い方を初めて知りました。