如何将文件内容按FQDN前缀拆分至对应命名的新文件
按FQDN前缀拆分文件内容
需求说明
现有输入文件(假设名为input.txt)内容如下:
serverA.domain.com plan_name: PlanA serverB.domain.com plan_name: PlanC serverA.domain.com plan_name: PlanB serverB.domain.com plan_name: PlanD
需要实现:提取每行第一列FQDN的第一部分(如serverA、serverB)作为文件名,将整行内容追加到对应文件中。最终生成的文件内容示例:
serverA文件:
serverA.domain.com plan_name: PlanA serverA.domain.com plan_name: PlanB
serverB文件:
serverB.domain.com plan_name: PlanC serverB.domain.com plan_name: PlanD
解决方案
方法1:用awk实现(简洁高效)
之前用awk失败大概率是分隔符设置问题,直接指定分隔符后即可完成需求:
awk -F'[ .]' '{print >> $1; close($1)}' input.txt
-F'[ .]':设置分隔符为空格或点,将serverA.domain.com拆分为serverA、domain、com,$1就是目标前缀print >> $1:把整行内容追加到以$1命名的文件close($1):处理完一行就关闭文件,避免大文件场景下耗尽文件句柄
方法2:用bash循环实现
如果想用for循环逻辑,可逐行读取处理:
while IFS= read -r line; do fqdn=$(echo "$line" | awk '{print $1}') prefix=$(echo "$fqdn" | cut -d. -f1) echo "$line" >> "$prefix" done < input.txt
while IFS= read -r line:安全读取每行内容,保留空格和特殊字符fqdn=$(...):提取每行第一列的完整FQDNprefix=$(...):按点分隔FQDN,取第一部分作为文件名echo "$line" >> "$prefix":将当前行追加到对应文件
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

