0

各行に「data:key」の形式の文字列を含む 10000 行のファイルがあります。これも右に 8 文字が埋め込まれています。「:」は区切り文字です。Linux 内から awk を使用してこれらのペアを独自の行に出力しようとしています。そのため、行 #1 = データ、行 #2 = キーであり、次のコマンドを使用してこれを達成しました。

awk -F: '{print $1; print$2}' < ~/prices.txt

私の問題は、各セットの 2 行目に発生します。何らかの理由で、行からデータを削除したときと同じだけの空白が埋め込まれています。したがって、私の行が「26900:9976」の場合、最初の行は「26900」になり、2 行目は' 9976'空白が含まれます。

興味があれば、この方法で実行したいと思います。なぜなら、結果を db_load にパイプして B+ ツリー内で使用するからです。

4

2 に答える 2

0

フィールドセパレータとして正規表現を使用できます。コロンの後に 0 個以上の空白文字が続くと、フィールドが分​​離されます。

awk -F ':[[:space:]]*' '{print $1; print $2}' < ~/prices.txt
于 2013-03-30T01:46:24.010 に答える
0

正確な答えではありませんが、これには tr を使用できます。

 tr ':' '\n' < input

また、awk コマンドで説明している動作はわかりませんが、いつでもパイプラインに sed を追加して、先頭の空白を削除できます。

 tr ':' '\n' < ~/prices.txt | sed 's/^[ \t]*//'
 awk -F: '{print $1; print$2}' < ~/prices.txt | sed 's/^[ \t]*//'
于 2013-03-30T01:06:39.070 に答える