如何将alldatalist.txt的外层路径与引用文件内的文件名拼接
简洁实现方案
方案1:单awk命令实现(最推荐,性能好)
直接一行命令即可完成需求,自动处理所有路径拼接:
awk '{ # 提取当前datalist.txt所在的目录路径 dir = $0 gsub(/datalist.txt$/, "", dir) # 逐行读取当前datalist.txt的内容 while((getline line < $0) > 0) { # 过滤空行,拼接后输出 if (line != "") { print dir line } } # 关闭打开的文件避免句柄泄漏 close($0) }' alldatalist.txt
逻辑说明:
- 逐行读取
alldatalist.txt的路径,把路径末尾的datalist.txt去掉,得到上级目录路径 - 读取对应datalist.txt里的每一个文件名,和目录路径直接拼接后输出
- 自动跳过子文件里的空行,匹配示例场景
方案2:xargs结合shell参数替换实现
如果你更习惯用xargs逻辑,可以用以下命令:
xargs -I {} sh -c 'sed "s#^#${1%datalist.txt}#" "$1"' _ {} < alldatalist.txt
逻辑说明:
- 用
-I {}把alldatalist.txt里的每一行路径作为参数传入子shell - 用shell参数扩展
${1%datalist.txt}去掉路径末尾的datalist.txt得到目录 - 用sed给子文件每一行开头加上目录前缀后输出
内容的提问来源于stack exchange,提问作者Gery
相关产品推荐
相关产品推荐

