Bash
如何在 .tsv 文件中使用 bash shell 中的 sed/awk 向 s3 儲存桶路徑添加雙引號
我有一個
.tsv
文件,其中包含 s3 儲存桶的源和目標資訊。我正在使用 while 循環從該文件中讀取源和目標路徑並執行s3 cp
操作。請注意,該文件包含 100K 行。如何使用命令使所有源路徑和目標路徑在文件 ( ) 中
sed
變為雙引號。xx.tsv
我需要雙引號,因為 aws s3 無法處理其中包含空格的文件/文件夾名稱而不用""
.我正在尋找類似以下 3 行的內容將被更改
s3://data01/repo01/image live01.png s3://Ata01/vol01/image live01.png s3://data02/repo01/image live01.png s3://Ata02/vol01/image live01.png s3://data03/repo01/image live01.png s3://Ata03/vol01/image live01.png
至
"s3://data01/repo01/image live01.png" "s3://Ata01/vol01/image live01.png" "s3://data02/repo01/image live01.png" "s3://Ata02/vol01/image live01.png" "s3://data03/repo01/image live01.png" "s3://Ata03/vol01/image live01.png"
在每個 Unix 機器上的任何 shell 中使用任何 awk:
$ awk -F'\t' -v OFS='"\t"' '{print "\"" $1, $2 "\""}' file "s3://data01/repo01/image live01.png" "s3://Ata01/vol01/image live01.png" "s3://data02/repo01/image live01.png" "s3://Ata02/vol01/image live01.png" "s3://data03/repo01/image live01.png" "s3://Ata03/vol01/image live01.png"
以上假設您的文件名都不包含製表符、換行符或雙引號。
$ cat input.tsv s3://data01/repo01/image live01.png s3://Ata01/vol01/image live01.png s3://data02/repo01/image live01.png s3://Ata02/vol01/image live01.png s3://data03/repo01/image live01.png s3://Ata03/vol01/image live01.png
注意:列由製表符分隔,而不是多個空格。
與
sed
:$ sed -E 's/^(s3:.*)\t+(s3:.*)/"\1"\t"\2"/' input.tsv "s3://data01/repo01/image live01.png" "s3://Ata01/vol01/image live01.png" "s3://data02/repo01/image live01.png" "s3://Ata02/vol01/image live01.png" "s3://data03/repo01/image live01.png" "s3://Ata03/vol01/image live01.png"
在兩個擷取組之間使用
\s+
or[[:blank:]]+
代替也\t
可以工作,並產生相同的輸出。IEsed -E 's/^(s3:.*)[[:blank:]]+(s3:.*)/"\1"\t"\2"/' input.tsv
和
sed -E 's/^(s3:.*)\s+(s3:.*)/"\1"\t"\2"/' input.tsv
該
[[:blank:]]+
版本將匹配一個或多個空格或製表符作為列分隔符,而該\s+
版本將匹配一個或多個任何空白字元(包括空格、製表符等)。與
awk
:$ awk -F'\t' '{print "\"" $1 "\"\t\"" $2 "\""}' input.tsv "s3://data01/repo01/image live01.png" "s3://Ata01/vol01/image live01.png" "s3://data02/repo01/image live01.png" "s3://Ata02/vol01/image live01.png" "s3://data03/repo01/image live01.png" "s3://Ata03/vol01/image live01.png"