表 1.csv
DATE, TIMESTAMP, ID, START TIME, END TIME, DURATION
2019-04-05, 13:57:19, 1607,13:06:42, 13:07:12, 00:00:30
2019-04-05, 13:58:00, 2327,13:57:26, 13:57:43, 00:00:17
2019-04-24, 12:30:00, 1836,11:20:01, 12:30:00, 01:09:59
2019-04-24, 12:30:00, 1836,11:20:01, 12:30:00, 01:09:59
2019-04-24, 15:30:01, 1836,14:50:01, 15:30:01, 00:40:00
2019-04-24, 15:30:01, 1836,14:50:01, 15:30:01, 00:40:00
表 2.csv
KEY, ID, NAME
407, 1607, RECORD1
1127,2327, RECORD2
636, 1836, RECORD3
664, 1864, RECORD4
703, 1903, RECORD5
次のように、TABLE1.csvの列3とTABLE2.csvの列2を目的の出力と一致させます。
DATE, TIMESTAMP, ID, NAME, START TIME, END TIME, DURATION
2019-04-05, 13:57:19, 1607, RECORD1, 13:06:42, 13:07:12, 00:00:30
2019-04-05, 13:58:00, 2327, RECORD2, 13:57:26, 13:57:43, 00:00:17
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
私はすべての例を試しました
awk -F',' 'FNR==NR.....
答え1
このsed
コレクションはスペースの置換を保存し、TABLE2.csv
列を追加します。
sed 's/^[^,]*, *\([0-9]*,[^,]*\)$/\1/
T2
H;d
:2
G
s/\([^,]*,[^,]*, *\)\([0-9]*,\)\([^[:cntrl:]]*\)\n.*\n\2\([^[:cntrl:]]*\)/\1\2\4, \3/
P;d' TABLE2.csv TABLE1.csv
必要に応じて、変更されたタイトルにいくつかのコンテンツを追加する必要があります。
s/^[^,]*, *\([0-9]*,[^,]*\)$/\1/
TABLE2.csv
行から2番目と3番目の列を抽出します。T2
:2
置き換えが行われない場合は、次にジャンプします(したがってTABLE2.csv
行の場合)。- 変更された
TABLE2.csv
行は、前のスペースに追加されたH
後にd
削除されます(行の実行を中止)。 :2
ジャンプマークです。以下のTABLE1.csv
作業はすべて行に対してのみ行われます。G
予約済みスペースからパターンスペースとしてルックアップテーブルを追加します。s/\([^,]*,[^,]*, *\)\([0-9]*,\)\([^[:cntrl:]]*\)\n.*\n\2\([^[:cntrl:]]*\)/\1\2\4, \3/
ルックアップテーブルでID()エントリを見つけて、一致する[0-9]*,
フィールドを追加します。P
追加されたルックアップテーブルなしでこの行を印刷し、d
この行の実行を停止します。
詳細な説明は参考にしてくださいあるファイルで定義されたコンテンツを別のファイルに置き換える方法
答え2
私は使用しますアッそのために
awk -F', *' -v OFS=', ' '
NR == FNR { name[$2] = $3; next }
{ $3 = $3 OFS name[$3]; print }
' TABLE{2,1}.csv
出力
DATE, TIMESTAMP, ID, NAME, START TIME, END TIME, DURATION
2019-04-05, 13:57:19, 1607, RECORD1, 13:06:42, 13:07:12, 00:00:30
2019-04-05, 13:58:00, 2327, RECORD2, 13:57:26, 13:57:43, 00:00:17
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
まず、TABLE2を読み取り、IDをNAMEにマップします。
次に TABLE1 を読み取り、ID フィールドに NAME を追加します。
列間隔の書式設定はユーザーの役割です。