1

私はbashスクリプトを初めて使用します。テキストメイトにも本当に夢中になっています。とにかく、次のようなものを含むtxtファイルがあります.....

Smith:David:111 Oak St.:Colorado Springs:CO:80901
Smith:Tina:111 Oak St.:Colorado Springs:CO:80901
Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907

それを読み込んで、次の形式で表示するプログラムを作成しようとしています。

Jane Doe
5245 Anystreet St.
Any City, State 22222

John Doe
2245 Anystreet St.
Any City, State 22222

使用するコマンドとその使用方法に関する初心者向けのドキュメントが見つかりません。いくつかのサイトでは詳細なドキュメントが提供されていますが、理解するのは困難です。sort コマンドを実装して郵便番号でソートしたいのですが、従うべき良い例を得ることができません。誰かがこれを理解するのを手伝ってくれますか、それとも私が始めるのを手伝ってくれますか?

----------------------------------------さらなる質問「更新」----- -------------------------

アドバイスをありがとう、それは非常に役に立ちました。私はいくつかの異なる方法でプログラムを書きましたが、別の学生が行った例について最後にいくつか質問があります。コードのすべてを完全に理解していない。質問をコメントとして入れました。

ここに画像の説明を入力

4

3 に答える 3

5

使用できる場合、タスクは簡単ですawk

awk -F: '{print $2,$1 ORS $3 ORS $4", "$5,$6 ORS}' file

テスト:

$ cat file
Smith:David:111 Oak St.:Colorado Springs:CO:80901
Smith:Tina:111 Oak St.:Colorado Springs:CO:80901
Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907

$ awk -F: '{print $2,$1 ORS $3 ORS $4", "$5,$6 ORS}' file
David Smith
111 Oak St.
Colorado Springs, CO 80901

Tina Smith
111 Oak St.
Colorado Springs, CO 80901

Steve Martin
2233 Cascade St.
Colorado Springs, CO 80907

bash で配列を使用して、次のことを行うことができます。

while IFS=: read -ra line; do 
  printf "%s %s\n%s\n%s, %s %s %s\n\n" "${line[1]}" "${line[0]}" "${line[2]}" "${line[3]}" "${line[4]}" "
${line[5]}"; 
done < file

出力

David Smith
111 Oak St.
Colorado Springs, CO 80901 

Tina Smith
111 Oak St.
Colorado Springs, CO 80901 

Steve Martin
2233 Cascade St.
Colorado Springs, CO 80907
于 2013-07-26T04:39:09.070 に答える
2

IFS をコロンに設定し、それを慎重に利用できます。

$ cat > xyz
Smith:David:111 Oak St.:Colorado Springs:CO:80901
Smith:Tina:111 Oak St.:Colorado Springs:CO:80901
Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907
$ while read line
> do (IFS=:
>     set -- $line
>     echo $2 $1
>     echo $3
>     echo $4, $5 $6
>     echo
>    )
> done < xyz
David Smith
111 Oak St.
Colorado Springs, CO 80901

Tina Smith
111 Oak St.
Colorado Springs, CO 80901

Steve Martin
2233 Cascade St.
Colorado Springs, CO 80907

$

サブシェルの使用はオプションですがIFS、メイン シェルでは変更されないことを意味します — 通常は良い考えです。

于 2013-07-26T04:48:15.670 に答える
0

この単純なもの:

cat file | sed -r 's/(.*):(.*):(.*):(.*):(.*):(.*)/\1 \2\n\3\n\4,\5 \6\n/'
于 2013-07-26T05:07:46.587 に答える