TABLE1.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
TABLE2.csv
KEY, ID, NAME
407, 1607, RECORD1
1127,2327, RECORD2
636, 1836, RECORD3
664, 1864, RECORD4
703, 1903, RECORD5
TABLE1.csvのColoumn3とTABLE2.csvのColoumn2を一致させ、以下のように出力する必要があります。
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.....
これ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/
[0-9]*,
ルックアップテーブルでID()の出現を検索し、一致するフィールドを追加しますP
(ルックアップテーブルを追加せずに)行を出力し、その行のd
実行を停止します。詳細な説明については、あるファイルで定義された置換を別のファイルで実行する方法を参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加