2011-02-08 16 views
2

テキストファイルを操作しようとしています。私はそれの大部分を自分で分かっていますが、なぜsedが無限ループモードに入るのかが分かりません。テキストファイルはcensus.govからダウンロードできます。sedは終了しても終了しません

現時点では、私はforループにスローして州固有の処理を行うことができる状態のリストが必要です。これまでのところ、私はこれを持っています。 (私は、forループで出力を使用する()$にこれを入れたい

sed 1d tables/ansi.csv | awk -F "," '{print $1}' | uniq | tr \n : | sed s/:/" "/g 

。提案は歓迎され、bashの専門家ではないんだけど、何らかの理由で、sedのは、ハングアップして出て​​いません私は実際に物事を適切にフォーマットするために、最終的なsedコマンドにいくつかの事柄を追加する必要がありますが、これ以上正しく実行する前に正しく動作させる必要があります。最初のいくつかを示しています):

"AL" "AK" "AZ" "AR" "CA" "CO" ....

今、sedは私が期待しているものより多くを返しますそして、リターンは(ちょうど最後の数を示す)

...."MP" "PR" "UM" "VI" "

しかし、ではなく、sedのハングを出て、私は、スクリプトの外にはCtrl-Cを持っています。最終的なsedステートメントを削除した場合、小さなスクリプトは、私が期待するように、ハングすることなく実行されます。

だから、なぜ地球上でこのぶら下がりですか?

+0

FWIWは、あなたのコマンドは、OSX上で正常に動作します。 'sed --version'がここではうまくいかないのに、どのバージョンのsedがあるのか​​は分かりません。 – whaley

+0

@whaley - OSXではうまくいきますが、Ubuntuではうまくいきません。私は、BSDユーザランドユーティリティがわずかに異なると思います。私は好奇心が強いです、OSXでawkの声明が下に投稿されましたか? – Choens

+0

はい、コマンド全体が機能し、そのCSVファイルをダウンロードして自分で試しました。 – whaley

答えて

2

私は、引用符の内側にsedスクリプトを置くことをお勧め:

sed 1d tables/ansi.csv | awk -F "," '{print $1}' | uniq | tr '\n' : | sed 's/:/" "/g' 

sedが「ハング」ように見えるという理由trsedが必要とする最後の改行を削除している可能性があります。ちなみに、trの改行引数は引用符で囲む必要があります。

しかし、全体のことをAWKで行うことができます

awk -F, 'NR > 1 {a[$1]=$1} END { delim=":"; num=asort(a); for (i=1;i<=num;i++) printf "\"%s\" ",a[i]; printf "\n"}' tables/ansi.csv 
+0

ありがとうございます。 awkステートメントは完全に機能します。私は本当にもっとawkを学ぶ時間を過ごす必要があります。引用はsed文から誤って削除されました。彼らはそこにいて、私は問題を理解しようとしているすべてを削除し、私はそれらを戻すのを忘れてしまった。 – Choens

0
awk -F"," 'NR>1 && (!($1 in a)){print $1;a[$1]}' file|sort|awk '{printf "\"%s\" ",$1}' 
関連する問題