- ベストアンサー
awkのセパレータ指定について
awkのセパレータ指定について教えてください。 以下のようなファイルがありそれを'||'区切りで出力したいです。 下記のような指定をしてみたのですが、 うまくいきませんでした。 cat text | awk -F '||' '{print $1}' [test.txt] aaa||bbb||ccc [期待する結果] print $1 → aaa print $2 → bbb print $3 → ccc どなたか教えてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
関連するQ&A
- 今、awkを使ったシェルスクリプトを作っています。
今、awkを使ったシェルスクリプトを作っています。 aaa bbb ccc ddd ee ff gggg hhh といったファイルから、 bbb,ccc ff,gggg を取り出したいと思っています。 そこで、以下のコマンドをwhileでまわして、$iを増加させることにより、 ファイルを一行ずつ読み取り、目的の列を取り出したく思っています。 A=`cat sample.txt|awk 'NR == $i {print NR, $2;}'` B=`cat sample.txt|awk 'NR == $i {print NR, $3;}'` ところが、awkコマンドの中の$iがシングルクォーテーションでくくられているので、 変数展開されなくて困っています。 何かよい方法があればご教授いただけますでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- unixのawkについて
unixでawkを使ってフルパスからディレクトリとファイル名に分けようと しているのですが、上手くいきません。 例えば ①/aaa/bbb/ccc ②/111/222/333/hoge.txt ③/hoge/foo/bar/dk@0:1 を ①/aaa/bbb と ccc ②/111/222/333 と hoge.txt ③/hoge/foo/bar と dk@0:1 としたいのです。 echo "/111/222/333/hoge.txt" | gawk '{sub(/\/.*$/,"",$0); print}' としてみたのですが、 ディレクトリだけを取り出そうとしたのですが上手くいきません。 よろしくお願いします。 OSは、Solaris、Linuxになります。
- ベストアンサー
- Solaris系OS
- シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです
シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのですが、どうしたらいいでしょうか? 例えば、以下のようなtest.shというファイルを作ったとします。 --------------- #!/bin/sh AAA="x y" echo "" | awk '{print $AAA}' -------------- としたとき、$AAAが正常に出力できません。(なお、echo "" は、awkを走らせる為の単なるダミーです。) printの部分を ・awk '{print '$AAA'}' ・awk '{print "'$AAA'"}' などともしてみましたが、ダメでした。どのようにすればうまくいくでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- awkのgsubによる置換
awkのgsubで置換をしているのですが、置換後、全体をprintするため $0で出力したところ、セパレータがカンマ区切りから半角スペースに なってしまいます。 置換されなかった場合は、何事もなくそのまま出力されます。 これは、そのようなものなのでしょうか もし、カンマ区切りで出力したい場合は、ループなどで繰り返して 出す以外ないのでしょうか gawk -F"," '{if ($5=="1") {gsub($2,'abc',$2); print $0} else {print $0}}' hoge.txt
- ベストアンサー
- Solaris系OS
- シェル:大量の比較方法に困ってます
ファイル容量毎にフラグを付与したいと思ってます。 しかし、区分けが多いので判断する方法がわかりません。 例) 容量 ファイル名 13 aaa.txt 53 bbb.txt 153 ccc.txt 800 ddd.txt 1200 eee.txt ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 容量 ファイル名 フラグ 13 aaa.txt 0 53 bbb.txt 500 173 ccc.txt 1500 830 ddd.txt 8000 1220 eee.txt 10000 【判断基準】 容量 フラグ 1~50 0 51~100 500 101~150 1000 151~200 1500 201~250 2000 ・ ・ ・ 4901~4950 40000 4951~5000 45000 最終は5000まで判断させたいのですが記述方法がわかりません。 少ない判断でよければ cat aaa.log | awk 50<$2 '{print $2,"50",$3}' | awk $2<100 '{print $2,"50",$3}' な感じで挑戦してみたのですが・・・・。 ご教授お願いします
- ベストアンサー
- Linux系OS
- [シェルの質問]改行と結合
bsh初心者です。 よろしくお願いします。 1)下記のような","で区切られている場合、","を見つけたら 改行して出力したいです。 [入力] aaa,bbb,ccc, ddd,eee,fff [出力] aaa, bbb, ccc, ddd, eee, fff 2)下記のように、ある文字"aaa"をみつけたら、その次の行と結合して 出力したいです。 [入力] aaa: Hello! [出力] aaa:Hello! とこんな感じです。 awkとか使わないとできないでしょうか? awkはあんまり詳しくないので、できたら 記述例をいただけると幸いです よろしくお願いします。
- ベストアンサー
- その他(OS)
- awk,sedの問題を教えて下さい。
1)以下のファイルを元にして aaa bbb ccc ddd eee ffff ggg hhh iiii 最初の欄だけとりだしてファイルにする方法は? 2)上記で元のファイルをベースにして1行コマンドで 下記の内容のファイルを作れ。 cat aaa > aaa.txt cat ddd > ddd.txt cat ggg > ggg.txt 3)以下のファイルに対してsedコマンドで file1 file2 file3 下のようなファイルを作成せよ cat file1 > /dev/null cat file2 > /dev/null cat file3 > /dev/null 上記3問宜しくお願い致します。
- 締切済み
- その他(ITシステム運用・管理)
- 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"など文字列を出したいのですがどうすればいいでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- 文字変換で,を改行されないようにしたい
下記のスクリプトでファイルから読み込んだ行毎の文字列<>を'=>'に変換後、行の先頭に'を付け足し行の最後に',を付け加えた場合、変な風に改行されてしまいます。 $ cat list1.txt 01<>ああああ 01_01<>あAAA 01_02<>あBBB 01_03<>あCCC 01_04<>あDDD 02<>いいいい 02_01<>いAAA 02_02<>いBBB 02_03<>いCCC 02_04<>いDDD open(IN, "<list1.txt"); @datas = <IN>; close(IN); open(OUT, ">date.txt"); foreach (@datas) { ($a, $b) = split(/<>/, $_); print OUT "'$a'=>'$b',"; } close(OUT); 実行結果 $ cat date.txt '01'=>'ああああ ','01_01'=>'あAAA ','01_02'=>'あBBB ','01_03'=>'あCCC ','01_04'=>'あDDD ','02'=>'いいいい ','02_01'=>'いAAA ','02_02'=>'いBBB ','02_03'=>'いCCC ','02_04'=>'いDDD ', これを下記のように整形するにはスクリプトのどこを直せばよいのでしょうか。 '01'=>'ああああ', '01_01'=>'あAAA', '01_02'=>'あBBB', '01_03'=>'あCCC', '01_04'=>'あDDD', '02'=>'いいいい', '02_01'=>'いAAA', '02_02'=>'いBBB', '02_03'=>'いCCC', '02_04'=>'いDDD', どなたかご教授お願い致します。(上記のスクリプト以外の方法で スマートなやり方などありましたらあわせてご教授頂けますと助かります。)
- ベストアンサー
- Perl
- Cシェルでテキストファイルの行削除方法
現在、Cシェルの勉強をしていますが、ある文言に完全一致した行のみ削除する方法が分かりません。 例として、下記のようなファイルがあり、"AAA"を指定して削除しようとすると、"AAA_1"までも削除されてしまいます。 例)test.txt AAA aaa AAA_1 aaa BBB bbb CCC ccc お手数ですがご教授いただけると幸いです。 以上、宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- WindowsでMFC-J898Nを使用している方の中には、クラウドからリダイレクト印刷ができないという問題に直面している方もいるかもしれません。
- 機種のページを見ても自分でよくわからない場合、対応していない機種なのかもしれません。
- 詳しい方に教えていただけると助かります。
お礼
回答ありがとうございます。 正規表現で行うのですね。 期待する動きとなりました。 ありがとうございました。