awkメモ(ifとかgsubとか)
概要
詳細
aws s3 ls
aws s3 ls --recursiveをすると、以下のようなテキストが取れる
2023-04-28 15:51:30 6592 path/to/file/file1.jpg 2023-04-28 15:51:30 12042 path/to/file/file2.jpeg 2023-04-28 15:51:30 60251 path/to/file/file3.png 2023-04-28 15:51:30 7176 path/to/file/file4.jpg 2023-04-28 15:51:30 7176 path/to/file/file5.htlm 2023-04-28 15:51:30 7176 path/to/file/file6.jpg
これがファイルになっていると仮定
aws s3 ls s3://bucket-name/path/to/target/directory/ --recursive --profile my-profile > s3.txt
awkで抽出
cat s3.txt | awk '{ if (match($4, /^path\/to\/file\/.*(\.jpg|\.png)/)) { gsub(/^path\/to\/file\//, "", $4); print "./"$4 } }'
./file1.jpg
./file3.png
./file4.jpg
./file6.jpg
解説
awk '{ if (match($4, /^path\/to\/file\/.*(\.jpg|\.png)/))
これが$4つまり4つ目のカラムから抜き出して、正規表現matchで特定のパターンが存在するかどうかを判定するif文
{ gsub(/^path\/to\/file\//, "", $4);
こちらが、gsubで文字列の置換をしている部分。
先頭のpath/to/file/の部分を削除している
print "./"$4
最後に先頭に./を追記してプリントしている