我有一个bash脚本,它获取一个文本文件作为输入,并接受两个参数(第1行和第2行),然后在文本中相互更改这两行。代码如下:
#!/bin/bash
awk -v var="$1" -v var1="$2" 'NR==var {
s=$0
for(i=var+1; i < var1 ; i++) {
getline; s1=s1?s1 "\n" $0:$0
}
getline; print; print s1 s
next
}1' Ham > newHam_changed.txt
对于不连续的每两行,它都可以正常工作。但对于后面的行(例如第5、6行),它可以工作,但在它们之间创建一个空行。我该怎么解决?
最佳答案
我认为你的真实剧本不是你在问题中发表的。我想所有的指纹都包括:
print s1 "\n" s
问题是,当行是连续的时,
s1
将是空的(跳过for
循环),但它仍然会在s
之前打印一个换行符,从而生成一个空行。所以你需要把换行符设为条件。
awk -v var="4" -v var1="6" 'NR==var {
s=$0
for(i=var+1; i < var1 ; i++) {
getline; s1=s1?s1 "\n" $0:$0
}
getline; print; print (s1 ? s1 "\n" : "") s
next
}1' Ham > newHam_changed.txt
关于linux - 更改文本文件的两行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54353965/