列にデータを含む2つのファイルFile-1とFile-2があります。次のように別のファイルを作成し、そのデータに対応するFile-2の最初の列のデータを行単位でfile-1にコピーしたいと思います。
ファイル1
A P
B Q
C R
ファイル2
5.4 9.0
7.4 11.5
9.4 15.7
出力
A=5.4, B=7.4, C=9.4
データの最初の列に対してのみ、出力が上記の行形式であることを望みます。
助けてくれてありがとう! !
よろしくお願いします! ! !
答え1
「結合」(質問のタイトルで参照)は、あるデータセットを使用して別のデータセットからデータを抽出する特定のタスク(リレーショナル結合タスク)です。これはjoin
ユーティリティ(または短いコマンド)を使用して実行できますawk
。
あなたが望むのはデータ抽出とマージです。質問テキストでこれを非常によく説明します。
シェルがあると仮定すると、以下を使用して各ファイルbash
の最初の列の内容を抽出できます。cut
=
paste
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2)
A=5.4
B=7.4
C=9.4
それぞれ(プロセス置換)は、置換内のコマンド出力を読み取ることができる一時<(...)
ファイルの名前で置き換えられます。cut
paste
その後、次のように1つのカンマ区切りの行に結合できます。
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) | paste -d ',' -s -
A=5.4,B=7.4,C=9.4
各コンマの後にスペースが必要な場合は、次のものをsed
使用できます。
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) | paste -d ',' -s - | sed 's/,/, /g'
A=5.4, B=7.4, C=9.4
質問の空行は実際にはデータファイルの一部ではないと仮定します。sed '/^[[:blank:]]*$/d'
空白行または空白および/またはタブのみを含む行を削除する前処理されたデータを使用できます。
cut
paste
and(man cut
and)のマニュアルも参照してくださいman paste
。
答え2
$ paste file1 file2 | awk '{printf "%s%s=%s", sep, $1, $3; sep=", "} END{print ""}'
A=5.4, B=7.4, C=9.4