3

从文件中提取第 3-5 行和第 11-13 行的最佳方法是什么(一行,最好使用头部和尾部)?

这完成了第一部分,但我怎样才能抓住 11-13 而不会弄得一团糟?xD

head -5 some_file | tail -3 > output_file
4

5 回答 5

8

我认为sed可以轻松做到这一点sed -n -e "3,5p" -e "11,13p" some_file > output_file

-n告诉 sed 不要输出每一行。-e's 告诉 sed 打印出哪些部分。看不到你是怎么用 head 和 tail 做的:head -5只给你前 5 行,所以你不能只管它到 tail - 你需要一个新命令,所以看看更复杂的东西,比如:

head -5 some_file > output_file; tail -3 some_file >> output_file
于 2013-05-27T22:15:01.960 回答
6

awk你可以这样做:

awk '(NR>=3 && NR<=5) || (NR>=11 && NR<=15) {print}' some_file >output_file

Glenn Jackman 建议的简化版本:

awk '(NR >= 3 && NR <= 5) || (NR >= 11 && NR <= 15)' some_file >output_file
于 2013-05-27T22:19:53.917 回答
3

最好的方法是与sed

sed '1,2d; 6,10d; 14,$d' some_file

引号中的位是命令,分号是命令分隔符。 1,2d6,10d分别删除第 1 到 2 行和第 6 到 10 行,并14,$d删除第 14 行到文件末尾。我不得不承认我更喜欢亚历克西斯的回答:

sed -n '3,5p; 11,13p' some_file

如果只是因为它说“打印第 3-5 行和第 11-13 行”,而不是我的,它说要删除你不想要的行。

如果你坚持只使用headtail

(head -5 some_file | tail -3; head -13 some_file | tail -3)
于 2013-05-27T22:15:17.847 回答
2

尝试这个:

sed -n -e 3,5p -e 11,13p some_file
于 2013-05-27T22:18:12.043 回答
1

您可以结合两个管道:

(head -5 some_file | tail -3; head -13 some_file | tail -3) > output_file
于 2013-05-27T22:12:47.087 回答