我有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”。
答案 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
很高兴在标准输入下阅读脚本,但是其他一些版本则不会。