在文件中插入行

时间:2014-05-14 08:26:40

标签: bash awk

我的输入文件看起来像:

cellIdentity="42901"
cellIdentity="42902"
cellIdentity="42903"

字符串中的数字与文件不同。 我现在想要的是创建看起来像

的输出文件
cellIdentity="42901"
cellIdentity="42905"
cellIdentity="42902"
cellIdentity="42906"
cellIdentity="42903"
cellIdentity="42907"

所以基本上我需要插入3个与输入文件具有相同值的新行,只有最后一个数字将始终为5,6,7。

我尝试使用awk,我认为我处于良好的状态,但仍然缺少某些东西,所以请帮忙。 感谢

awk 'BEGIN{split("5 6 7",a," ")}NR%2==0{t=$0;sub(/.$/,a[++i],$2);$0=t RS $0}1' FS=\" OFS=\" /tmp/MC/Cell_F1 > /tmp/MC/Cell_F2

3 个答案:

答案 0 :(得分:1)

根据您的awk

awk 'BEGIN {split("5 6 7",a," ")} {print $0"\n" substr($0,1,18) a[++i] "\""}' file
cellIdentity="42901"
cellIdentity="42905"
cellIdentity="42902"
cellIdentity="42906"
cellIdentity="42903"
cellIdentity="42907"

我取了原始字符串的一部分并为其添加数字 如果您有其他数字,更大的数字,您可能需要更改一些。

答案 1 :(得分:1)

是的,你的方式很好。问题是你在输入中的偶数行上执行替换:

NR%2==0

删除支票应解决问题:

awk 'BEGIN{split("5 6 7",a," ")}{t=$0;sub(/.$/,a[++i],$2);$0=t RS $0}1' FS=\" OFS=\" /tmp/MC/Cell_F1 > /tmp/MC/Cell_F2

答案 2 :(得分:0)

因为你已经有了一些awk答案。在perl中怎么样?

perl -pe 'BEGIN{$n=4}
          $n++>7?$n=5:$n;
          $a=$_;print $a;
          s/(\d).$/$n."\""/ge' your_file