我是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
}
上面的代码按我的意愿打印行,但是没有对正在读取的文件进行任何更改。我该怎么办?
答案 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
您可以编写脚本以查找文件中更改的记录数。