" "FNR}' file.txt &gtresult.txt 其中,表示当前处理的文件行内容,FNR表示当前处理的文件行行号。" /> " "FNR}' file.txt &gtresult.txt 其中,表示当前处理的文件行内容,FNR表示当前处理的文件行行号。"> 怎么在文件中每行后面添加行数号(shell命令)_教程_内存溢出

阅读 8

怎么在文件中每行后面添加行数号(shell命令),第1张

用awk,一条命令就可以搞定: awk '{print $0" "FNR}' file.txt >result.txt 其中,$0表示当前处理的文件行内容,FNR表示当前处理的文件行

行号

结果存在result.txt中。

为拓展思路,下面用一个不同的方法: 用sed得到每行行号,存入一个tmp文件,然后用paste合并这两个行数相同的文件就得到了。 假设

你的

原始文件名称为file.txt。

#!/bin/sh

sed -n '=' file.txt >tmp

paste file.txt tmp >result.txt

rm -f tmp

awk中不能解析shell变量,建议做法是通过-v传递进去:

typeline=`cat $typepath | awk -v str="$typetmp" '/str/{print NR}'`

第一句之所以在awk中可以直接使用shell变量$line,是因为用的双引号。

从执行效率上来说,你的写法其实太过累赘,下面是改良版:

typetmp=`awk -F":" -v n=$line 'NR==n{print $1}' $paratmppath`

typeline=`sed -n '/'"$typetmp"'/=' $typepath`

这里用sed来获取行号。

第一句,cut能做的awk也能做,直接在一个awk里完成就行。

awk和sed本身就是直接对文件的处理,用不着先cat再通过管道传递过来处理。

"$typetmp"前面的单引号用于跟一开始的单引号凑成一对,关闭sed作用域回到shell环境中,使得shell可以解析此变量,然后重新用单引号再次进入sed作用域。等于将sed作用域从中间分割开了。

1、sed打印出第2行

sed -n '2p' /etc/passwd


2、awk打印出第2行

awk 'NR==2{print}' /etc/passwd

欢迎分享,转载请注明来源:内存溢出

原文地址:
http://outofmemory.cn/tougao/11637930.html变量
一句
(0) 微信扫一扫 打赏 支付宝扫一扫 微信扫一扫
支付宝扫一扫
浙江理工大学分数线 浙江理工大学分数线
Word文档设置大纲的方法步骤详解
上一篇
2023-05-17
淘宝店铺优惠券如何设置?
2023-05-17

发表评论 后才能评论
提交

评论列表(0条)

2022-8-7

过细
雅礼
" "FNR}' file.txt &gtresult.txt其中,表示当前处理的文件行内容,FNR表示当前处理的文件行行号。", "pubDate": "2023-05-17", "upDate": "2023-05-17" } " "FNR}' file.txt &gtresult.txt其中,表示当前处理的文件行内容,FNR表示当前处理的文件行行号。', author : '浙江理工大学分数线', cat_name : '教程', time_y_m : '2023年05月', time_d : '17', site_motto : '内存溢出' };
保存{label} {label} {label} {label} {script} {script} {script} {script}