質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

1回答

1975閲覧

【シェル芸】改行毎にawkで区切り、grepで特定の文字列が入っているレコードを抽出したい

usansa

総合スコア2

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2021/08/09 06:18

[address.txt]から改行毎に区切り、4つのレコードとし、そのうち「合格」という文字列が入っているレコードを抽出するにはどうすればよいでしょうか。

address.txt
---ここから---
東川 雄一
合格
080-1111-1111
〒111-1111
××県××区A町 1-1-1
ABCビル1001

西村 祐二
不合格
080-2222-2222
〒222-2222
××県××市B町 2-22

南山 裕三
合格
080-3333-3333
〒333-3333
××県××市C町 3-3-3
XYZハイツ3号室

北岡 優四
不合格
080-4444-4444
〒444-4444
××県××区D町 4-4-4
---ここまで---

以下のコマンドを入力しても何も出力されません。
cat address.txt | awk 'BEGIN{RS="";FS="\n"}' | grep '合格'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

awk 'BEGIN{RS="";FS="\n"}'

だと、BEGIN部しかないので何も実行されません。

sh

1awk 'BEGIN{RS="";FS="\n"} $2=="合格"'

でしょうか。

grepだと行単位になってしまいます。参考:awk 'BEGIN{RS="";FS="\n"}1' | grep 合格

【シェル芸】

基本機能レベルのことはあまり「シェル芸」とは言わない気がします。

投稿2021/08/09 06:39

otn

総合スコア84645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usansa

2021/08/09 07:08

ご回答をありがとうございます。 以下のコマンドを改めて実行したのですが、出力されません。。。 cat address.txt | awk 'BEGIN{RS="";FS="\n"} $2=="合格"'
otn

2021/08/09 07:29

実行したデータが、質問文の物と違うのでは? 質問文のデータでやってみましょう。
otn

2021/08/09 07:32

あと、改行コードがCRLFになってないかとか。
usansa

2021/08/09 07:57

ご回答ありがとうございます。 すいません、指定したファイルを間違えておりました。 ところが、次は全て出力されてしまいました。 cat address.txt | awk 'BEGIN{RS="";FS="\n"} $2=="合格"' 東川 雄一 合格 080-1111-1111 〒111-1111 ××県××区A町 1-1-1 ABCビル1001 西村 祐二 不合格 080-2222-2222 〒222-2222 ××県××市B町 2-22 南山 裕三 合格 080-3333-3333 〒333-3333 ××県××市C町 3-3-3 XYZハイツ3号室 北岡 優四 不合格 080-4444-4444 〒444-4444 ××県××区D町 4-4-4 改行コードは下記になります。 0000000 346 235 261 345 267 235 351 233 204 344 270 200 \n 345 220 0000020 210 346 240 274 \n 0 8 0 - 1 1 1 1 - 1 1 0000040 1 1 \n 343 200 222 1 1 1 - 1 1 1 1 \n 303 0000060 227 303 227 347 234 214 303 227 303 227 345 214 272 A 347 224 0000100 272 1 - 1 - 1 \n A B C 343 203 223 343 203 0000120 253 1 0 0 1 \n \t \n 350 245 277 346 235 221 347 0000140 245 220 344 272 214 \n 344 270 215 345 220 210 346 240 274 \n 0000160 0 8 0 - 2 2 2 2 - 2 2 2 2 \n 343 200 0000200 222 2 2 2 - 2 2 2 2 \n 303 227 303 227 347 234 0000220 214 303 227 303 227 345 270 202 B 347 224 272 2 - 2 0000240 2 \n \t \n 345 215 227 345 261 261 350 243 225 344 270 0000260 211 \n 345 220 210 346 240 274 \n 0 8 0 - 3 3 3 0000300 3 - 3 3 3 3 \n 343 200 222 3 3 3 - 3 3 0000320 3 3 \n 303 227 303 227 347 234 214 303 227 303 227 345 270 0000340 202 C 347 224 272 3 - 3 - 3 \n X Y Z 343 0000360 203 217 343 202 244 343 203 204 3 345 217 267 345 256 244 \n 0000400 \t \n 345 214 227 345 262 241 345 204 252 345 233 233 \n 0000420 344 270 215 345 220 210 346 240 274 \n 0 8 0 - 4 4 0000440 4 4 - 4 4 4 4 \n 343 200 222 4 4 4 - 4 0000460 4 4 4 \n 303 227 303 227 347 234 214 303 227 303 227 345 0000500 214 272 D 347 224 272 4 - 4 - 4 \n 0000515 どうしてでしょうか。。。
otn

2021/08/09 08:05

区切りが空行でなくタブの入った行になっていますね。 空行にしましょう。
usansa

2021/08/09 09:30

trで空白に直しました。 0000000 346 235 261 345 267 235 351 233 204 344 270 200 \n 345 220 0000020 210 346 240 274 \n 0 8 0 - 1 1 1 1 - 1 1 0000040 1 1 \n 343 200 222 1 1 1 - 1 1 1 1 \n 303 0000100 272 1 - 1 - 1 \n A B C 343 203 223 343 203 0000120 253 1 0 0 1 \n \n 350 245 277 346 235 221 347 0000140 245 220 344 272 214 \n 344 270 215 345 220 210 346 240 274 \n 0000160 0 8 0 - 2 2 2 2 - 2 2 2 2 \n 343 200 0000200 222 2 2 2 - 2 2 2 2 \n 303 227 303 227 347 234 0000240 2 \n \n 345 215 227 345 261 261 350 243 225 344 270 0000260 211 \n 345 220 210 346 240 274 \n 0 8 0 - 3 3 3 0000300 3 - 3 3 3 3 \n 343 200 222 3 3 3 - 3 3 0000320 3 3 \n 303 227 303 227 347 234 214 303 227 303 227 345 270 0000340 202 C 347 224 272 3 - 3 - 3 \n X Y Z 343 0000360 203 217 343 202 244 343 203 204 3 345 217 267 345 256 244 \n 0000400 \n 345 214 227 345 262 241 345 204 252 345 233 233 \n 0000420 344 270 215 345 220 210 346 240 274 \n 0 8 0 - 4 4 0000440 4 4 - 4 4 4 4 \n 343 200 222 4 4 4 - 4 0000460 4 4 4 \n 303 227 303 227 347 234 214 303 227 303 227 345 0000500 214 272 D 347 224 272 4 - 4 - 4 \n まだ、すべて出力をされてしまいます。。。 cat address.txt | tr '\t' '' > address4.txt cat address4.txt | awk 'BEGIN{RS="";FS="\n"} $2=="合格"' 東川 雄一 合格 080-1111-1111 〒111-1111 ××県××区A町 1-1-1 ABCビル1001 西村 祐二 不合格 080-2222-2222 〒222-2222 ××県××市B町 2-22 南山 裕三 合格 080-3333-3333 〒333-3333 ××県××市C町 3-3-3 XYZハイツ3号室 北岡 優四 不合格 080-4444-4444 〒444-4444 ××県××区D町 4-4-4 od -c address4.txt 0000000 346 235 261 345 267 235 351 233 204 344 270 200 \n 345 220 0000020 210 346 240 274 \n 0 8 0 - 1 1 1 1 - 1 1 0000040 1 1 \n 343 200 222 1 1 1 - 1 1 1 1 \n 303 0000060 227 303 227 347 234 214 303 227 303 227 345 214 272 A 347 224 0000100 272 1 - 1 - 1 \n A B C 343 203 223 343 203 0000120 253 1 0 0 1 \n \n 350 245 277 346 235 221 347 0000140 245 220 344 272 214 \n 344 270 215 345 220 210 346 240 274 \n 0000160 0 8 0 - 2 2 2 2 - 2 2 2 2 \n 343 200 0000200 222 2 2 2 - 2 2 2 2 \n 303 227 303 227 347 234 0000220 214 303 227 303 227 345 270 202 B 347 224 272 2 - 2 0000240 2 \n \n 345 215 227 345 261 261 350 243 225 344 270 0000260 211 \n 345 220 210 346 240 274 \n 0 8 0 - 3 3 3 0000300 3 - 3 3 3 3 \n 343 200 222 3 3 3 - 3 3 0000320 3 3 \n 303 227 303 227 347 234 214 303 227 303 227 345 270 0000340 202 C 347 224 272 3 - 3 - 3 \n X Y Z 343 0000360 203 217 343 202 244 343 203 204 3 345 217 267 345 256 244 \n 0000400 \n 345 214 227 345 262 241 345 204 252 345 233 233 \n 0000420 344 270 215 345 220 210 346 240 274 \n 0 8 0 - 4 4 0000440 4 4 - 4 4 4 4 \n 343 200 222 4 4 4 - 4 0000460 4 4 4 \n 303 227 303 227 347 234 214 303 227 303 227 345 0000500 214 272 D 347 224 272 4 - 4 - 4 \n 0000515 なぜでしょうか。。
otn

2021/08/09 11:47

またファイルを取り違えているのでは? また、tr '\t' '' でエラーにならないと言うことはLinuxではない? タブの削除は tr -d '\t' です。
usansa

2021/08/09 12:54

何度もすいません。タブを消去したところできました。ありがとうございました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問