我需要帮助以Shell脚本中的奇数行分隔我的.dat文件

时间:2019-01-28 13:12:08

标签: bash shell

我有30行的.dat(EvsKpoint_Sn.dat)文件,我需要将奇数行分隔到另一个文件中。

我已经在下面编写了代码,但无法正常工作。

#!/bin/bash
for i in $(seq 1 2 29)
do
        sed -n '$ip' EvsKpoint_Sn.dat >> EvsKsep.dat    
done

它在输出文件中仅返回很多“ p”。

2 个答案:

答案 0 :(得分:2)

首先,您需要使用带有双引号(sed)的双引号"来扩展外壳变量,并且由于ip在一起,因此您需要使用{}将变量与其他变量分开。

IE。

sed -n "${i}p"

第二,sed可以独自完成所有任务:

sed 'n;d' file

尝试一下,看看它是否是您想要的:

sed 'n;d' EvsKpoint_Sn.dat >> EvsKsep.dat

答案 1 :(得分:1)

这是Awk的尝试。

sorted_open =sorted(open[0].items(), key=lambda item: item.orderID)
print(sorted_open)

变量awk 'NR%2' EvsKpoint_Sn.dat > EvsKsep.dat 是输入行号,而NR是熟悉的模运算。因此,如果行号除以2留下提示,我们将其打印出来。

在同一个文件中循环运行%脚本是一种反模式。通常的解决方案是使用您要执行的操作生成脚本,然后将其传递给sed,并使其仅处理输入文件一次。

sed

但是,这并不是完全可移植的。 Linux seq 1 2 29 | sed 's/$/p/' | sed -n -f - EvsKpoint_Sn.dat > EvsKsep.dat 很高兴在标准输入下阅读脚本,但是其他一些版本则不会。