我已经能够从一个大的制表符分隔的文本文件中提取某些行,并将其写入另一个文件:
sed -n 100,200p file.tsv >> output.txt
但是,我实际上试图抓住每行的第8个制表符分隔的值 ,并将它们写入逗号分隔的文件,但是我无法find用于模式匹配的正确语法,尽pipe读了许多在线文章。
每次我基本上都在试图匹配
$2 in /([^t]*t){7}([0-9]*).*/
禁用sed中反斜杠的转义函数
没有运气。
文本文件file.tsv中的行类似于:
01 name1 title1 summary1 desc1 image1 url1 120019 time1 02 name2 title2 summary2 desc2 image2 url2 576689 time2
请任何人都可以帮助我这个查询?
如何删除具有特定string的所有行,但不删除同一文件的特定部分中包含相同string的行
使用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] 举报,一经查实,本站将立刻删除。