Shell-Script
從一列中選擇特定的匹配關鍵字並將其粘貼到最後一列-Linux
我有 CSV 中的數據,其中第 3 列包含確切的 5 位數字。需要複製此號碼並粘貼到最後一列。
2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok. 2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok. 2020-05-19_19:03:07,200, 2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.
輸出:
2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok.,17622 2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok.,95840 2020-05-19_19:03:07,200,, 2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.,66638
我嘗試使用 sed 搜尋 5 位數字,但由於它也有字元,所以它不起作用。
sed -n '/\b[0-9]\{5\}\b/p'
$ sed -E 's/_([0-9]{5})_(.*)$/_\1_\2,\1/' file 2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok.,17622 2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok.,95840 2020-05-19_19:03:07,200, 2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.,66638
_([0-9]{5})_
匹配之間的五位數字_
(.*)$
匹配到行尾_\1_\2,\1
恢復原始部分 (_\1_\2
) 然後追加,\1
您在問題中的範例數據有尾隨空格字元。如果您的實時數據使用也是這種情況
sed -E 's/_([0-9]{5})_(.*\.)[[:blank:]]+$/_\1_\2,\1/' file
而是去除尾隨空格。
你可以使用 awk’s
match
- 比如$ awk -F, 'BEGIN{OFS=FS} match($3,/_[0-9]{5}_/){$(NF+1) = substr($3,RSTART+1,RLENGTH-2)} 1' file.csv 2020-05-19_19:03:07,210,HR051919040_to_17622_is_ok.,17622 2020-05-19_19:03:07,200,MP051919032700_to_Average_95840_is_ok.,95840 2020-05-19_19:03:07,200, 2020-05-19_19:03:07,200,RJ0515_to_System__to_66638_is_nok.,66638
在匹配項中包含前導和尾隨下劃線,然後用 修剪它們,以
substr
確保您不會匹配該欄位中其他位置的 5 位數字序列。