导航:首页 > 文件目录 > awk动态修改文件内容

awk动态修改文件内容

发布时间:2024-06-12 11:45:59

1. 如何使用awk将某一个文件的某一行替换到另一个文件的某一行

这里用 awk 没有 sed 方便,例如要将 b.txt 的第 3 行替换成 a.txt 的第 2 行(数字请自己替换)

exports=`专awk'NR==2'a.txt`
awk'NR==3{$0=ENVIRON["s"]};1'b.txt>c.txt

s=`awk'NR==2'a.txt` 表示将第2行赋值给s,$0=ENVIRON["s"] 表示替换,结属果存在c.txt

用 sed 解决更方便

sed-i"3s/.*/`sed-ne2pa.txt`/"b.txt

直接修改 b.txt

2. awk命令详解

除了使用sed命令答租运,linux系统中还有一个功能更加强大型缓的文本数据处理工具,就是awk。它诞生于20世纪70年代末期,这也许是它影响了众多Linux用户的原因之一。和sed命令类似,awk命令也是逐行扫描文件(从第1行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。awk命令的基本格式[root@localhost]#awk[选项]'脚本命令'文件名。awk的强大之处在于脚本命令,它由2部分组成,分别为匹配规则和执行命令。
awk的主要特性之一是其处理文本文件中数据的能力
它会自动给一行清梁中的每个数据元素分配一个变量。

3. linux 文本内容替换(awk/sed)

假设你的文件叫做filename,敲

sed's/([0-9]{4}-[0-9][0-9]-[0-9][0-9])-([0-9][0-9]).([0-9][0-9]).([0-9][0-9]).([0-9]{6})/12:3:4/g'filename>output


新的结果就会存在outpu文件里了


20140729,05163245,10888,003051,2014-07-29 22:54:58,00

20140729,05161734,10725,051504,2014-07-29 22:54:59,00

这是用你的数据回得到的样板答案答

4. shell如何根据A文件内容替换B文件中的内容

用 awk, 把下面的代码存入文件中,比如 my.awk

BEGIN {
while ((getline < "test") > 0) {
record[$1]=($2 " " $3)
}
close("test")
}

{
if ($1 in record) {
printf("%s %s\n", $2, record[$1])
}
}

然后执行 awk -f my.awk batch
就会打印出你需要的结果。 可以用
awk -f my.awk batch > result
将结果存入 result 文件中。

5. awk如何替换批量文件中的字符

能否达到你的需求.

以上重点可关注

for i in `ls testOne/*.txt` #列出要处理的文件
do

awk '{ if(sub(/a/, "A")) print $0 >> "/tmp/"FILENAME} ' $i #sub(/a/, "A") (/搜索字符版串/, “替换字符串”)

#awk '{ if(sub(/a/, "A")) print $0,FILENAME >> "/tmp/"FILENAME} ' $i #加上FILENAME可以权看一下变量

done

网络搜索: awk 函数使用

6. linux awk命令

一、awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

二. awk命令格式和选项
2.1 awk的语法有两种形式
1. 命令行方式
awk [-F field-separator] 'commands' input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可选的。input-file(s)是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
2. 将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
2.2 命令选项
(1)-F fs or --field-separator fs :指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
(2)-v var=value or --asign var=value :赋值一个用户定义变量。
(3)-f scripfile or --file scriptfile :从脚本文件中读取awk命令。
(4)-mf nnn and -mr nnn :对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
(5)-W compact or --compat, -W traditional or --traditional :在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
(6)-W left or --left, -W right or --right :打印简短的版权信息。
(7)-W help or --help, -W usage or --usage :打印全部awk选项和每个选项的简短说明。
(8)-W lint or --lint :打印不能向传统unix平台移植的结构的警告。
(9)-W lint-old or --lint-old :打印关于不能向传统unix平台移植的结构的警告。
(10)-W posix :打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
(11)-W re-interval or --re-inerval :允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
(12)-W source program-text or --source program-text :使用program-text作为源代码,可与-f命令混用。
(13)-W version or --version :打印bug报告信息的版本
三. 使用方法
#awk '{pattern + action}' {filenames}
尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
四. 模式和操作
awk脚本是由模式和操作组成的:
pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。
两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。
4.1. 模式
模式可以是以下任意一个:
(1)正则表达式:使用通配符的扩展集。
(2)关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符(3)串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
(4)模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
(5)模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
(6)BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
(7)END:让用户在最后一条输入记录被读取之后发生的动作。
4.2. 操作
操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份:
(1)变量或数组赋值
(2)输出命令
(3)内置函数
(4)控制流命令

五. awk的环境变量

七. 记录和域
7.1. 记录
awk把每一个以换行符结束的行称为一个记录。
记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS中。
$0变量:它指的是整条记录。如$ awk '{print $0}' test将输出test文件中的所有记录。
变量NR:一个计数器,每处理完一条记录,NR的值就增加1。
如$ awk '{print NR,$0}' test将输出test文件中所有记录,并在记录前显示记录号。
7.2. 域
记录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。
7.3. 域分隔符
内建变量FS保存输入域分隔符的值,默认是空格或tab。我们可以通过-F命令行选项修改FS的值。如$ awk -F: '{print $1,$5}' test将打印以冒号为分隔符的第一,第五列的内容。
可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk -F'[:/t]' '{print $1,$3}' test,表示以空格、冒号和tab作为分隔符。
输出域的分隔符默认是一个空格,保存在OFS中。如$ awk -F: '{print $1,$5}' test,$1和$5间的逗号就是OFS的值。
八. 匹配操作符(~)
用来在记录或者域内匹配正则表达式。如$ awk '$1 ~/^root/' test将显示test文件第一列中以root开头的行。
九. 比较表达式
conditional expression1 ? expression2: expression3,
例如:
$ awk '{max = {$1 > $3} ? $1: $3: print max}' test。如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。
$ awk '$1 + $2 < 100' test。如果第一和第二个域相加大于100,则打印这些行。
$ awk '$1 > 5 && $2 < 10' test,如果第一个域大于5,并且第二个域小于10,则打印这些行。
十. 范围模板
范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。如$ awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。

7. awk 如何修改第N个字符开始到第N个字符结束之间的字符

使用C语言编写的程序及运行后修改的结果如图:

#include<stdio.h>

int main()

{ int i;

char s[201];

FILE *fp;

if((fp=fopen("file.txt","r"))==NULL)

{printf("file not found! ");

return 0;

}

fgets(s,200,fp);

if(s[4]=='b'&&s[5]=='e'&&s[6]=='e')

s[5]='i',s[6]='g';

fclose(fp);

fopen("file.txt","w");

fprintf(fp,"%s ",s);

fclose(fp);

return 0;

}

阅读全文

与awk动态修改文件内容相关的资料

热点内容
深宫曲文件夹是哪个 浏览:618
苹果u盘修复工具哪个好用 浏览:124
微信动态表情包搞笑 浏览:436
可以去哪里找编程老师问问题 浏览:608
win10lol全屏 浏览:25
qq图片动态动漫少女 浏览:122
sai绘图教程视频 浏览:519
如何分析加载减速法数据 浏览:672
手机怎么免费转换pdf文件格式 浏览:668
在哪个网站可以驾照年检 浏览:89
iphone可以播放ape吗 浏览:991
matlabp文件能破解吗 浏览:817
四川省高三大数据考试是什么 浏览:457
导出打开java文件 浏览:671
win10蓝屏是硬盘坏了么 浏览:46
沈阳哪里适合学编程 浏览:811
django19常用版本 浏览:521
三国志11保存在哪个文件夹 浏览:88
iphone4s加速 浏览:108
编程内存和显卡哪个重要 浏览:672

友情链接