用于编辑大型文本文件的Shell脚本

时间:2014-01-09 15:40:59

标签: shell

我需要将服务器名称附加到与该服务器关联的每个用户条目的前面。下面是我正在处理的文件的一个例子:

<server_name>
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
<server_name>
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash

我需要一个脚本来删除服务器名称并将其附加到用户条目的前面。所以文件最终看起来像这样:

<server_name_a>
<server_name_a>:at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
<server_name_a>:bin:x:1:1:bin:/bin:/bin/bash
<server_name_b>
<server_name_b>:at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
<server_name_b>:bin:x:1:1:bin:/bin:/bin/bash

2 个答案:

答案 0 :(得分:2)

这是一个简单的awk程序,应该按照您的描述进行操作:

awk '/^INFO/{prefix=$NF;next}{printf "%s:%s\n", prefix, $0}' < ${FILENAME} > ${OUTPUT}

答案 1 :(得分:1)

尝试这样的事情:

#!/bin/bash
cat $* | while read line
do
    if echo $line | grep "^INFO:" > /dev/null
    then
        SERVER=`echo "$line" | sed -e 's/.*<\(.*\)>.*/\1/g'`
    else 
        echo $SERVER:$line
    fi
done