如何在不使用模式匹配的情况下打印特定行

时间:2014-12-09 11:41:36

标签: awk sed

有没有办法打印特定的行(不使用模式匹配),就像我们用来打印列($ 1,$ 2,$ 3等)?

我的文字档案:

Hi
How are you?
I am from California.

是否有任何特殊字符可以实现这一目标,如$ 1,$ 2,$ 3等......?

3 个答案:

答案 0 :(得分:3)

使用sed:

~$ sed -n '3p' myfile
I am from California.

使用awk

~$ awk 'NR==3' myfile
I am from California.

如果文件很大,则应在找到该行时退出:

使用sed:

~$ sed -n '3{p;q}' myfile
I am from California.

使用awk

~$ awk 'NR==3{print;exit}' myfile
I am from California.

答案 1 :(得分:2)

就个人而言,我会使用sed或awk来做这个,但是如果你想使用python,你可以这样做:

with open('file') as f: 
    for i, l in enumerate(f): 
        if i == 2: 
            print l.rstrip()
            break

虽然稍长,但这种方法有一些优点。首先,整个文件不会开始读入内存(如readlines()的情况)。其次,一旦读取了所需的行,就会终止循环,而不是继续到文件的末尾。

我使用.rstrip()从行中删除尾随空格字符,包括换行符。感谢Avinash指出了这一点。

我首选的选择是以下列方式使用awk:

awk 'NR==2{print;exit}' file

当记录(行)编号为2时执行该块,因此打印第二行然后退出。

答案 2 :(得分:1)

f=open("file.txt",'r')
print f.readlines()[<any number you want>]