首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外壳脚本将前3个单词从文件中输送到一个新文件中,然后删除它们并循环

外壳脚本将前3个单词从文件中输送到一个新文件中,然后删除它们并循环
EN

Stack Overflow用户
提问于 2015-02-03 02:24:35
回答 6查看 871关注 0票数 1

我有一个文本文件与数百个'FirstName LastName电子邮件‘在一个字符串。我需要将字符串分割成一行1组。

代码语言:javascript
复制
FirstName LastName Email
FirstName LastName Email
FirstName LastName Email

我正在努力从文件中删除前3个单词后,我将它们导入一个新的文件,这样当脚本循环时,它将读取下一个3,管道,删除等。

代码语言:javascript
复制
awk '{print $1, $2, $3}' asd >> asd2 | cut -d' ' -f1-3 asd

我知道剪切是不对的,但老实说,我无法找到删除前三个单词的方法,我只是找到了删除整行的“sed”。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-02-03 02:34:04

这里不需要使用|符号。

代码语言:javascript
复制
awk '{print $1, $2, $3}' asd >> asd2; sed -i 's/^ *[^ ]\+ \+[^ ]\+ \+[^ ]\+//' asd

您可以在上面的命令中添加[^[:blank:]]而不是[^ ]。将正则表达式更改为's/^ *[^ ]\+ \+[^ ]\+ \+[^ ]\+ *//',以删除第三个单词之后存在的空格。

票数 0
EN

Stack Overflow用户

发布于 2015-02-03 03:17:50

xargs..。

代码语言:javascript
复制
$  cat asd
FirstName1 LastName1 Email1 FirstName2 LastName2 Email2 FirstName3 LastName3 Email3 ...

$ xargs -n3 < asd
FirstName1 LastName1 Email1
FirstName2 LastName2 Email2
FirstName3 LastName3 Email3
...

xargs语法:

代码语言:javascript
复制
xargs -nN [command=echo [args]]
  1. -n3意味着每次运行带有3个参数的命令。
  2. 如果未指定命令,则正在执行的默认命令为echo
票数 3
EN

Stack Overflow用户

发布于 2015-02-03 07:48:49

这个awk应该一蹴而就:

代码语言:javascript
复制
awk -vRS=" "  '{ORS=NR%3?RS:"\n"}1' asd 
FirstName LastName Email
FirstName LastName Email
FirstName LastName Email

通过将RS设置为一个空白,一个记录就是一个单词。

然后将ORS设置为三个字后的一个空格或新行。

可以将其中一些缩短为:

代码语言:javascript
复制
awk -vRS=" " 'ORS=NR%3?RS:"\n"' asd
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28290323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档