S3中Debian包空格分隔转换行分隔的技术实现问题
解决S3中Debian包列表的空格转换行汇总问题
我们在Amazon S3存储桶的不同文件夹里存了数量不等的Debian包,从AWS S3获取这些包的列表时,它们是用数量不定的空格分隔的。现在需要把这种格式转换成每行一个包的换行分隔格式,并且把所有文件夹的包汇总到一个文件里。
输入示例
package1.deb package2.deb pacakge3.deb pacakge4.deb package5.deb
输出示例
package1.deb package2.deb package3.deb pacakge4.deb
可行解决方案
方案1:用xargs快速拆分
xargs -n 1参数可直接将空格分隔的内容拆分为每行一项,自动处理连续空格问题:
function convertSpaceToNewLine(){ for file in "$@"; do grep '\.deb$' "$file" | xargs -n 1 >> folder/newfile done } # 使用方式:convertSpaceToNewLine 文件1 文件2 ...
方案2:用awk直接处理
awk默认以空白字符(含多个空格、制表符)为分隔符,遍历所有字段输出:
function convertSpaceToNewLine(){ for file in "$@"; do awk '/\.deb$/ {for(i=1;i<=NF;i++) print $i}' "$file" >> folder/newfile done }
方案3:用tr简化压缩转换
tr -s可直接将连续空白字符压缩为单个换行符,一步完成转换:
function convertSpaceToNewLine(){ for file in "$@"; do grep '\.deb$' "$file" | tr -s '[:space:]' '\n' >> folder/newfile done }
注意事项
- 用
"$@"接收任意数量的输入文件,适配多文件夹场景 - 变量加双引号
"$file",避免文件名含空格时出错 - 如需去重,可在输出前追加
sort -u,例如:... | sort -u >> folder/newfile
内容的提问来源于stack exchange,提问作者Rehana
相关产品推荐
相关产品推荐

