2017-10-23 10 views
-3

とキー値ファイルを折りたたみます。前の例では、出力は次のようになりますは私のようなファイルがbashコマンドライン

baz I love you. 
foobar Me too. 

私はAWKやPython、Perlの、等私にそれを行うことができる知っている

(第2列はスペースまたはタブによって接合されることになります)プレーンなBashコマンドでやりたい

+0

1つの組み込みbashコマンド(存在しない)が必要ですか、組み込み関数のみを使用するbashコード(既に試したことはありますか?)を参照したいですか?特定のツール(例えば、 'join'に似ています)? –

+0

@ MartinNyoltうまくいけば、私は、 'join'、' sort'や 'paste'のようなものを含む、巧妙なコマンドを期待していました。 (v in a)print v "\ t" a [v]} "file"のために 'awk '{a [$ 1] = a [$ 1]" "$ 2} END"を試しました。まあ、私は何か不可能に頼んだかもしれない? – unamourdeswann

+0

ええ、でも、なぜですか?なぜ実際のテキスト解析言語よりもbashを使いたいのですか?並べ替えと貼り付けはすべてbashではありません。 – 123

答えて

1

bashだけを使用する場合は、whileループ内のファイルを読み込み、値を連想配列に累積します。

$ declare -A values 
$ while read -r key val; do values["$key"]+="$val "; done < file 
$ for key in "${!values[@]}"; do printf "%s\t%s\n" "$key" "${values[$key]}"; done 
baz  I love you. 
foobar Me too. 

配列のキーの順序は不定であることに留意されたいです。出力がbazでfoobarであるのは偶然です。特定の注文を出力する必要がある場合は、もう少しコードが必要です。

関連する問題