编辑当前文件并从编辑的行读取

时间:2014-01-09 06:53:40

标签: awk gawk

我是AWK / sed的新手。我正在阅读一个看起来如下的文件,但它有大约1500条记录。另外,我将在多个此类文件上使用此脚本:

Der263849500 Glazed glazed.xyz14@zyx.com
Cds274849540 Trover trover.xyz12@zyx.com
Abd 246738209 Sigma Sigma.xyz13@zyx.com

如果您注意到,第三个记录在第一个和第二个字段之间有一个空格。我希望在文件本身中纠正该特定记录。此外,对线路进行后整理,AWK代码应再次处理整流线路。以下是我试过的代码 -

#! /usr/bin/awk -f

BEGIN {
    edited=0
}
{
    if (match($1,"[A-Z][a-z][a-z]$")!=0) {
        temp = $1 $2
        newLine = temp
        for (i = 3; i <= NF; i++) {
                if ($i != "") {
                    newLine = newLine " " $i
                }
            }
        print newLine
        FILRNAME[FNR]=newLine
        NR=NR-1
        edited=edited+1
    }
}
END {
    print "The number of lines edited is " edited
}

上面的代码按我的意愿打印行,但是没有对正在读取的文件进行任何更改。我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果您想更改文件。

awk 'some commands' inputfile > tmp & mv tmp inputfile

这将用新内容替换源文件。


sed -i 'some code' file

-i会回写原始文件。

答案 1 :(得分:0)

您可以使用sed命令使用以下命令在同一文件中进行更改:

sed -i '/^[A-Za-z]*[[:space:]]/ {s/\(.*\) \(.*\) \(.*\) \(.*\)/\1\2 \3 \4/g}' filename

您可以编写脚本以查找文件中更改的记录数。