我的输入文件看起来像:
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
答案 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