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

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

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

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

1443閲覧

bashで指定されたファイルを一行ずつ読み込むのと所定の区切り文字で要素を取り出す(配列に入れる)のと配列から所定した一番目と七番目の要素を取り出す。

L-sunsui

総合スコア45

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2019/08/20 02:56

指定されたファイルを一行ずつ読み込む と
所定の区切り文字で要素を取り出す(配列に入れる) と
配列から所定した一番目と七番目の要素を取り出す。をしたいのです。

bash

1[vagrant@localhost ~]$ cat /etc/passwd 2root:x:0:0:root:/root:/bin/bash 3bin:x:1:1:bin:/bin:/sbin/nologin 4daemon:x:2:2:daemon:/sbin:/sbin/nologin 5adm:x:3:4:adm:/var/adm:/sbin/nologin 6lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7sync:x:5:0:sync:/sbin:/bin/sync 8shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9halt:x:7:0:halt:/sbin:/sbin/halt 10mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11operator:x:11:0:operator:/root:/sbin/nologin 12games:x:12:100:games:/usr/games:/sbin/nologin 13ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 14nobody:x:99:99:Nobody:/:/sbin/nologin 15systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16dbus:x:81:81:System message bus:/:/sbin/nologin 17polkitd:x:999:997:User for polkitd:/:/sbin/nologin 18rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin 19rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin 20nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin 21postfix:x:89:89::/var/spool/postfix:/sbin/nologin 22chrony:x:998:995::/var/lib/chrony:/sbin/nologin 23sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 24vagrant:x:1000:1000:vagrant:/home/vagrant:/bin/bash 25vboxadd:x:997:1::/var/run/vboxadd:/bin/false 26apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin 27mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false 28[vagrant@localhost ~]$ cat /etc/passwd | awk -F':' '{print $3}' 29

macのターミナルでshellスクリプトの勉強してるのですが、書き方がわかりません。
同じウィンドーで続けて書いていいものですか?sed/awk/grepとか使うのでしょうか?
$ cat /etc/passwd | の後に何か続けて書くのだと思うのですがよくわかっていなく昨日と午前中が過ぎようとしています。有識者の方にご教授いただけますと幸いです。ご返答よろしくお願いいたします。

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

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

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

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

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

pi-chan

2019/08/20 03:12

確かにbashでは配列を使えますが、「配列に入れる」は必須ですか? passwd から「一番目と七番目の要素を取り出す」事が目的なのであれば、awkコマンドのワンライナー(一行野郎)で十分です。 (以下補足) 異論も有るかと思いますが、他の言語と同じ様にシェルスクリプトでプログラミングしようとするのは間違いだと思います。 シェルスクリプトを使ってマシンの性能を十分に引き出すには、処理自体は内部・外部のコマンドに任せるべきであって、シェルスクリプトの役割は、それらコマンド群を有機的に結び付ける事です。
guest

回答2

0

ベストアンサー

Bashの機能だけでも出来なくは無いですが、何らかのコマンドを使った方が良いです。
案1:cutコマンド
カラム区切り文字を指定して、指定番目のカラムだけ表示するという機能です。

案2:awkコマンド
もうすこしプログラム的な事を書けます。

と思ったら、

[vagrant@localhost ~]$ cat /etc/passwd | awk -F':' '{print $3}'

3カラム目の取り出しが出来ているじゃないですか。あと、何が分かりませんか?
1カラム目と7カラム目なら、'{print $1,$7}'です。

投稿2019/08/20 03:12

otn

総合スコア84423

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

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

L-sunsui

2019/08/20 03:30

ご返信ありがとうございます。ご教授いただいたとうりにやったらできました。うれしいです。 あと、awkの後の -F':'とかって暗記するものでしょうか?
otn

2019/08/20 03:42

awkでの区切り文字は -F というのは暗記出来る範囲だと思いますが、忘れた場合は man awk で表示されますので、無理に暗記しなくても良いです。 cut だと -d なんですよね。コマンドにより違う。
guest

0

こんにちは

以下でどうでしょう?

cut -f 1,7 --delim=":" /etc/passwd

以下にそのままの例が出ています。

以下の実行例では、「/etc/passwd」ファイルの1番目のフィールドと7番目のフィールドを出力しています。「/etc/passwd」ファイルは「:」でフィールドが区切られ、1番目はユーザー名、7番目のフィールドはログインシェルとなっています。

コマンド実行例
cut -f 1,7 --delim=":" /etc/passwd
(1番目と7番目のフィールドだけを出力する)(画面2)

  • 以上、

@IT 【 cut 】コマンド――行から固定長またはフィールド単位で切り出す - フィールドを指定して切り出す
より引用

参考になれば幸いです。

投稿2019/08/20 03:11

編集2019/08/20 03:16
jun68ykt

総合スコア9058

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問