SQLITEデータベースにインポートする前に編集したいCSVファイルがあります。数千行ありますが、行の一部をコピーしてパイプ「|」を使用して最後に追加したいと思います。簡単に分離してデータベースにインポートできます。
CSVには次の行が含まれています。
989155126903533568|2018-04-25|14:52:14|GMT|report|"""Умственно отстал"" was checked - http://steamcommunity.com/profiles/76561198402636850 …"|0|0|0|
989154874184085505|2018-04-25|14:51:14|GMT|report|"""Clavicus Vile"" was checked (8 reports) - http://steamcommunity.com/profiles/76561198006267103 …"|0|0|0|
989154622890823685|2018-04-25|14:50:14|GMT|report|"""~TAKA~"" was checked (3 reports) - http://steamcommunity.com/profiles/76561198161608591 …"|0|0|0|
765番号をコピーして、次のように行末に追加したいと思います。
989154622890823685|2018-04-25|14:50:14|GMT|report|"""~TAKA~"" was checked (3 reports) - http://steamcommunity.com/profiles/76561198161608591 …"|0|0|0|76561198161608591
CSVの各行に対してこれを行いたいと思います。したがって、for ループが必要な場合があります。わかりません。
答え1
sed
解決策:
sed -E 's/.*\/profiles\/([0-9]+).*/&\1/' file.csv
出力例:
989155126903533568|2018-04-25|14:52:14|GMT|report|"""Умственно отстал"" was checked - http://steamcommunity.com/profiles/76561198402636850 …"|0|0|0|76561198402636850
989154874184085505|2018-04-25|14:51:14|GMT|report|"""Clavicus Vile"" was checked (8 reports) - http://steamcommunity.com/profiles/76561198006267103 …"|0|0|0|76561198006267103
989154622890823685|2018-04-25|14:50:14|GMT|report|"""~TAKA~"" was checked (3 reports) - http://steamcommunity.com/profiles/76561198161608591 …"|0|0|0|76561198161608591
答え2
そしてawk
:
awk -F'["/]' '{print $0$(NF-1)}' infile > outfile
print
行全体$0
と最後の2番目のフィールド$(NF-1)
。ここで、フィールド区切り文字は引用符またはスラッシュのセットであり、-F
結果はに格納されます。'[...]'
"
/
infile
outfile
答え3
$ sed -E 'h;s/.*(http[^ ]*).*/\1/;s/.*\///;H;x;s/\n//' file
989155126903533568|2018-04-25|14:52:14|GMT|report|"""Умственно отстал"" was checked - http://steamcommunity.com/profiles/76561198402636850 …"|0|0|0|76561198402636850
989154874184085505|2018-04-25|14:51:14|GMT|report|"""Clavicus Vile"" was checked (8 reports) - http://steamcommunity.com/profiles/76561198006267103 …"|0|0|0|76561198006267103
989154622890823685|2018-04-25|14:50:14|GMT|report|"""~TAKA~"" was checked (3 reports) - http://steamcommunity.com/profiles/76561198161608591 …"|0|0|0|76561198161608591
コメント付きのスクリプトsed
:
h # save a copy of the current line in the "hold space"
s/.*(http[^ ]*).*/\1/ # remove everything but the URL
s/.*\/// # trim the URL so that only the last bit (the number) is left
H # add that last bit to the "hold space" (with a newline in-between)
x # swap the "hold space" and the "pattern space"
s/\n// # delete that inserted newline
# (implicit print at the end)
これはURLが常に次のようになると仮定します。ただURLだけが必要ですいつも空白文字で区切られます。