微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SED命令获得行x和y之间的第n个制表符分隔值

我已经能够从一个大的制表符分隔的文本文件提取某些行,并将其写入另一个文件

sed -n 100,200p file.tsv >> output.txt

但是,我实际上试图抓住每行的第8个制表符分隔的值 ,并将它们写入逗号分隔的文件,但是我无法find用于模式匹配的正确语法,尽pipe读了许多在线文章

每次我基本上都在试图匹配

$2 in /([^t]*t){7}([0-9]*).*/

如何提取unix中两个单词之间的文本?

禁用sed中反斜杠的转义函数

根据文件内容和模式匹配拆分文件

在模式之后提取一个string

删除模式之前的所有东西,包括使用awk或sed的模式

没有运气。

文本文件file.tsv中的行类似于:

01 name1 title1 summary1 desc1 image1 url1 120019 time1 02 name2 title2 summary2 desc2 image2 url2 576689 time2

请任何人都可以帮助我这个查询

Bash脚本:如何重命名文件删除数字字符?

如何删除具有特定string的所有行,但不删除同一文件的特定部分中包含相同string的行

使用sed删除每个单词上某个字符后的所有内容

使用Sed去除前导和尾随空格的问题

如何在Linux的特定时间戳范围内logging日志文件内容

这里使用的是GNU sed和扩展表达式:

sed -nre '100,200{s/^(S+s+){7}(S+).*$/2/;p}' file.tsv

这里只使用POSIX:

sed -n '100,200{s/^([^[:space:]]+[[:space:]]+){7}([^[:space:]]+).*$/2/;p}' file.tsv

我同意Alf认为awk更适合这个。

这里是awk解决方案的线路限制:

awk 'NR==100,NR==200{print $8}' file.tsv

Perl一行:

perl -F't' -ane 'push @csv,$F[7] if $. > 100 && $. < 200; END { print join ",",@csv if @csv }' /path/to/input/file > /path/to/output/file

我想我宁愿用这种方式使用awk:

$ awk '{ print col 8 : $8 }' file

我猜,前进的工作会更容易。

这将工作,如果有空领域。

sed -nre '100,200{s/^(([^t]*)t){7}([^t]*)(t.*|$)/3/;p}' file.tsv

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐