在unix管道中首先打印80个字符串

时间:2012-10-15 12:09:48

标签: perl sed awk

  

可能重复:
  Truncate stdin line length?

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

cat myfile.txt | # awk/perl here

我猜测像perl -pe 'print $_[0..80]'这样的东西应该有效,但我对perl并不擅长。

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

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

4 个答案:

答案 0 :(得分:13)

<强>切

cut -c1-80 your_file

<强> AWK:

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

<强> sed的:

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

答案 1 :(得分:2)

使用cut获取第一个字符:

$ cut -c1-80 myfile.txt

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

$ cut -b1-80 myfile.txt

答案 2 :(得分:1)

使用如下:

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

其他方式是:

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

此处不需要catawk可以从文件中读取。

答案 3 :(得分:1)

其中一个cut / sed / awk解决方案可能适合您,但您也可能对折叠感兴趣,因为它可以让您在字符计数前面的空格处包裹行并截断,而不是在字符计数处的中间字符如果你愿意,请计算:

$ 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有一些其他命令写入stdout并且只是使用“cat”来演示问题。