持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
Linux如何将文件中的多行转换成1行
使用awk将文件中的多行转换成1行
1. 采用awk
awk默认将记录分隔符(record separator即RS)设置为\n,此行代码将RS设置为EOF(文件结束),也就是把文件视为一个记录,然后通过gsub函数将\n替换成空格,最后输出。
[root@localhost ~]# awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file
2. 采用sed
sed默认只按行处理,N可以让其读入下一行,再对\n进行替换,这样就可以将两行并做一行。但是怎么将所有行并作一行呢?可以采用sed的跳转功能。:a 在代码开始处设置一个标记a,在代码执行到结尾处时利用跳转命令t a重新跳转到标号a处,重新执行代码,这样就可以递归的将所有行合并成一行。
[root@localhost ~]# sed ':a ; N;s/\n/ / ; t a ; ' file
3. cat file | xargs
这可能是最简单的一种方式。
[root@localhost ~]# cat file | xargs echo
awk命令 去掉重复行
linux awk命令 去掉重复行
1.打印指定列 域信息
more lance3333.txt | awk -F ":" '{print $3}'|awk '{print $3}'
2.把文件中的重复行 写入 lance444
awk 'a[$0]++' lance.txt >> lance444.txt
3.把 lance.txt 文件中的不重复行 写入 lance333
awk '!a[$0]++' lance.txt >> lance3333.txt
4.查询文件夹下所有包括指定字符串的文件内容 并把他们写入 lance.txt
grep -r "BatchUpdateException: Duplicate" ./* >>lance.txt
5.查询文件中包括某个字符的所有行
grep -r "BatchUpdateException: Duplicate" /root/tomcat/logs/catalina.out
cat `ls ./*` >> lance.txt
wc -l filename 就是查看文件里有多少行
1
2
3
4
6.FS服务器被攻击 数据出现重复时:
6.1.归集数据
cat `ls ./*` >> lance.txt
6.2数据去重
awk '!a[$0]++' lance.txt >> data.txt
6.3.垃圾数据删除 删除包括有 以下关键字的记录行 删除指定条件的行
SUBSCRIBER_ABSENT
NO_ROUTE_DESTINATION
sed -i -e '/NO_ROUTE_DESTINATION/d' data.txt
sed -i -e '/SUBSCRIBER_ABSENT/d' data.txt