从以下命令中,我如何消除之前出现的所有行
Owner RepoName CreatedDate
编辑命令:
find /opt/site/ -name '.log.txt' | xargs cat | awk '{$NF=""; print $0}' | sed '1i Owner RepoName CreatedDate' | column -t
输出是
find: Filesystem loop detected; `/nfs/.snapshot/nightly.4' has the same device number and inode as a directory which is 2 levels higher in the filesystem hierarchy.
find: Filesystem loop detected; `/nfs/.snapshot/nightly.5' has the same device number and inode as a directory which is 2 levels higher in the filesystem hierarchy.
find: Filesystem loop detected; `/nfs/.snapshot/nightly.6' has the same device number and inode as a directory which is 2 levels higher in the filesystem hierarchy.
Owner RepoName CreatedDate
val abc Fri Mar 16 17:01:07 PDT
p1 repo_pc Wed Mar 21 11:34:42 PDT
New fm Mon Mar 19 00:15:51 PD
所需的输出仅为:
Owner RepoName CreatedDate
val abc Fri Mar 16 17:01:07 PDT
p1 repo_pc Wed Mar 21 11:34:42 PDT
New fm Mon Mar 19 00:15:51 PD
解决方法:
这些查找错误将位于stderr上,因此完全绕开您的链,您将要使用2> / dev / null重定向错误,尽管这样做可以防止您在find命令中看到任何其他错误.
find /opt/site/ -name '.log.txt' 2>/dev/null | xargs cat | awk '{$NF=""; print $0}' | xargs sed "/Filesystem/d" | sed '1i Owner RepoName CreatedDate' | column -t
通常,使用像这样的复杂命令,应该在遇到错误时将其分解,以便找出问题出在哪里.
让我们分解一下该命令,看看它在做什么:
查找/ opt / site / -name’.log.txt’2> / dev / null-查找/ opt / site /下名为.log.txt的所有文件
xargs cat-一个接一个地获取所有内容
awk'{$NF =“”;打印$0}’-删除最后一列
xargs sed“ / Filesystem / d”-将每个条目视为文件,并从这些文件的内容中删除包含Filesystem的所有行.
sed’1i Owner RepoName CreatedDate’-在第一行插入所有者RepoName CreatedDate
column -t-将给定数据转换为表
我建议建立命令,并在每个阶段检查输出是否正确.
您的命令有几件令人惊讶的事情:
>查找文件查找的文件完全是.log.txt,而不是扩展名.
>第二个xargs调用-将.log.txt文件的内容转换为文件名.
标签:linux,awk,sed,command
来源: https://codeday.me/bug/20191013/1910811.html