流linux逐行切割

时间:2014-03-06 04:18:46

标签: linux bash zsh cut gnu-coreutils

我希望通过逐行切割传递线条(非常像egrep --line-buffered)。我怎样才能做到这一点?我们欢迎{awksedperl解决方案,请保持简短。 :)]

2 个答案:

答案 0 :(得分:2)

如果你只想在UNIX中模拟循环中的cut功能(可能很慢),你可以使用awk的 substr 函数。

例如,假设您有一个文本文件(lines.txt),其排列方式如下:

line1: the first line
line2: the second line
line3: the third line
line4: the fourth line
line5: the fifth line

使用此单行,其中 8 是您要从以下各行开始打印的字符的索引:

awk '{ print substr($0,8) }' lines.txt

结果如下:

the first line
the second line
the third line
the fourth line
the fifth line

如果要删除特定单词或正则表达式,可以将其作为字段分隔符输入到awk中,然后打印要删除的部分后面的行部分:

例如,这个单行:

awk 'BEGIN { FS=": " } { print $2 }' lines.txt

还会打印出来:

the first line
the second line
the third line
the fourth line
the fifth line

因为你可以利用这样一个事实:每行包含一个分号后跟一个空格(“:”)来将该行分成两部分。然后你只需告诉awk打印每行(打印$ 2)的第二部分(即字段)。

答案 1 :(得分:1)

您可以使用stdbuf实用程序来控制使用stdio的任何命令的stdio缓冲

... | stdbuf -oL cut ... | ...