1

可能重复:
截断标准输入行长度?

我一直在寻找一个awkperl(或者可能sed?)单行来打印一行中的前 80 个字符,用于:

cat myfile.txt | # awk/perl here

我猜perl -pe 'print $_[0..80]'应该可以工作,但我不擅长 perl。

编辑 perl -pe 'print $_[0..80]不起作用,我不知道为什么。这就是我问这个问题的原因。在所有那些沉默的反对票之后,我想解释一下..

cat myfile.txt只是为了证明命令应该在管道中,我实际上正在使用其他一些输出。

4

4 回答 4

13

切:

cut -c1-80 your_file

awk:

awk '{print substr($0,0,80)}' your_file

赛德:

sed -e 's/^\(.\{80\}\).*/\1/' your_file

perl:

perl -lne 'print substr($_,0,80)' your_file

或者:

perl -lpe 's/.{80}\K.*//s' your_file

grep:

grep -o "^.\{80\}" your_file
于 2012-10-15T12:18:10.463 回答
2

使用cut, 获取第一个字符:

$ cut -c1-80 myfile.txt

如果您想要第一个字节,请使用-b

$ cut -b1-80 myfile.txt
于 2012-10-15T12:13:06.173 回答
1

使用如下:

$ cat myfile.txt | awk '{print substr($0,0,80)}'    

另一种方式是:

$ awk '{print substr($0,0,80)}' x

这里不需要catawk可以从文件中读取。

于 2012-10-15T12:18:21.170 回答
1

cut/sed/awk 解决方案之一可能适合您,但您可能也对 fold 感兴趣,因为它可以让您在字符数之前的空格处换行并截断,而不是在字符数的中间处截断,如果您像:

$ cat file
the quick brown fox jumped over the lazy dog's back

$ cat file | fold -w29
the quick brown fox jumped ov
er the lazy dog's back

$ cat file | fold -s -w29
the quick brown fox jumped
over the lazy dog's back

$ cat file | fold -w29 | head -1
the quick brown fox jumped ov

$ cat file | fold -s -w29 | head -1
the quick brown fox jumped

顺便说一句,我绝对不会使用上面显示的“cat”,我假设 OP 有一些其他命令写入标准输出并且只是使用“cat”来演示这个问题。

于 2012-10-15T16:25:36.793 回答