如何打印第三列到最后一列?

2024-10-29 08:34:00
admin
原创
51
摘要:问题描述:我正在尝试从 DbgView 日志文件中删除前两列(我不感兴趣)。我似乎找不到从第 3 列开始打印直到行末的示例。请注意,每行的列数不定。解决方案 1:...或者更简单的解决方案:cut -f 3- INPUTFILE 只需添加正确的分隔符(-d)即可获得相同的效果。解决方案 2:awk &...

问题描述:

我正在尝试从 DbgView 日志文件中删除前两列(我不感兴趣)。我似乎找不到从第 3 列开始打印直到行末的示例。请注意,每行的列数不定。


解决方案 1:

...或者更简单的解决方案:cut -f 3- INPUTFILE 只需添加正确的分隔符(-d)即可获得相同的效果。

解决方案 2:

awk '{for(i=3;i<=NF;++i)print $i}' 

解决方案 3:

awk '{ print substr($0, index($0,$3)) }'

解决方案在这里找到: http:

//www.linuxquestions.org/questions/linux-newbie-8/awk-print-field-to-end-and-character-count-179078/

解决方案 4:

Jonathan Feinberg的答案将每个字段打印在单独的行上。您可以使用printf重建记录以在同一行上输出,但您也可以将字段向左移动一跳。

awk '{for (i=1; i<=NF-2; i++) $i = $(i+2); NF-=2; print}' logfile

解决方案 5:

awk '{$1=$2=$3=""}1' file

注意:此方法会在 1、2、3 字段中留下“空白”,但如果您只想查看输出,则这不是问题。

解决方案 6:

例如,如果您想在同一行打印第三列之后的列,则可以使用:

awk '{for(i=3; i<=NF; ++i) printf "%s ", $i; print ""}'

例如:

Mar 09:39 20180301_123131.jpg
Mar 13:28 20180301_124304.jpg
Mar 13:35 20180301_124358.jpg
Feb 09:45 Cisco_WebEx_Add-On.dmg
Feb 12:49 Docker.dmg
Feb 09:04 Grammarly.dmg
Feb 09:20 Payslip 10459 %2828-02-2018%29.pdf

它将打印:

20180301_123131.jpg
20180301_124304.jpg
20180301_124358.jpg
Cisco_WebEx_Add-On.dmg
Docker.dmg
Grammarly.dmg
Payslip 10459 %2828-02-2018%29.pdf

我们可以看到,工资单即使有空格,也显示在正确的行中。

解决方案 7:

那么下面这一行呢:

awk'{$1=$2=$3="";打印}'文件

根据@ghostdog74的建议。当你过滤行时,我的应该表现得更好,即:

awk'/^exim4-config/{$1=""; print}'文件

解决方案 8:

awk -v m="x0a" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'

这将截断给定字段 nr., N 之前的内容,并打印行的其余部分,包括字段 nr.N 并保持原始间距(它不会重新格式化)。如果字段的字符串也出现在行中的其他地方,这并不重要,这是 daisaa 的答案的问题。

定义一个函数:

fromField () { 
awk -v m="x0a" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}

像这样使用它:

$ echo "  bat   bi       iru   lau bost   " | fromField 3
iru   lau bost   
$ echo "  bat   bi       iru   lau bost   " | fromField 2
bi       iru   lau bost 

输出保留所有内容,包括尾随空格

对于以 '/n' 为记录分隔符的文件,效果很好,因此行内没有换行符。如果您想将其与其他记录分隔符一起使用,请使用:

awk -v m="x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'

例如。只要行内不使用十六进制字符 1,几乎可以适用于所有文件。

解决方案 9:

awk '{a=match($0, $3); print substr($0,a)}'

首先,找到第三列的起始位置。使用 substr,您将从位置(在本例中为 a)开始到行尾打印整行 ($0)。

解决方案 10:

以下 awk 命令打印每行的最后 N 个字段,并在行末打印一个换行符:

awk '{for( i=6; i<=NF; i++ ){printf( "%s ", $i )}; printf( "
"); }'

下面的示例列出了 /usr/bin 目录的内容,然后保留最后 3 行,然后使用 awk 打印每行的最后 4 列:

$ ls -ltr /usr/bin/ | tail -3
-rwxr-xr-x 1 root root       14736 Jan 14  2014 bcomps
-rwxr-xr-x 1 root root       10480 Jan 14  2014 acyclic
-rwxr-xr-x 1 root root    35868448 May 22  2014 skype

$ ls -ltr /usr/bin/ | tail -3 | awk '{for( i=6; i<=NF; i++ ){printf( "%s ", $i )}; printf( "
"); }'
Jan 14 2014 bcomps 
Jan 14 2014 acyclic 
May 22 2014 skype

解决方案 11:

Perl 解决方案:

perl -lane 'splice @F,0,2; print join " ",@F' file

这些命令行选项用于:

  • -n循环输入文件的每一行,不自动打印每一行

  • -l在处理之前删除换行符,然后将其添加回来

  • -a自动分割模式 – 将输入行分割到 @F 数组中。默认按空格分割

  • -e执行 perl 代码

splice @F,0,2从 @F 数组中彻底删除第 0 列和第 1 列

join " ",@F连接 @F 数组的元素,每个元素之间使用空格

如果您的输入文件以逗号分隔,而不是以空格分隔,请使用-F, -lane


Python解决方案:

`python -c "import sys;[sys.stdout.write(' '.join(line.split()[2:]) + '
') for line in sys.stdin]" < file`

解决方案 12:

其实,你可以使用正则表达式轻松实现相同的效果。假设分隔符是空格,则它看起来像:

awk &#039;{ sub(/[^ ]+ +[^ ]+ +/, &quot;&quot;); print }&#039;

解决方案 13:

awk &#039;{print &quot;&quot;}{for(i=3;i&lt;=NF;++i)printf $i&quot; &quot;}&#039;

解决方案 14:

有点晚了,但以上方法似乎都不起作用。试试这个,使用 printf,在每个之间插入空格。我选择在末尾不加换行符。

awk &#039;{for(i=3;i&lt;=NF;++i) printf(&quot;%s &quot;,  $i) }&#039;

解决方案 15:

awk &#039;{for (i=4; i&lt;=NF; i++)printf(&quot;%c&quot;, $i); printf(&quot;
&quot;);}&#039;

按照原始文件中的顺序打印从第 4 个字段到最后一个字段的记录

解决方案 16:

在 Bash 中,你可以使用带有位置参数的以下语法:

while read -a cols; do echo ${cols[@]:2}; done &lt; file.txt

了解更多:Bash Hackers Wiki 上的处理位置参数

解决方案 17:

如果只是忽略前两个字段,并且如果您不想在屏蔽这些字段时留有空格(就像上面的某些答案一样):

awk &#039;{gsub($1&quot; &quot;$2&quot; &quot;,&quot;&quot;); print;}&#039; file

解决方案 18:

awk &#039;{$1=$2=&quot;&quot;}1&#039; FILENAME | sed &#039;s/s+//g&#039;

清除前两列,sed删除前导空格。

解决方案 19:

在 AWK 中,列称为字段,因此 NF 是关键

所有行:

awk -F &#039;&lt;column separator>&#039; &#039;{print $(NF-2)}&#039; &lt;filename>

仅限第一行:

awk -F &#039;&lt;column separator>&#039; &#039;NR&lt;=1{print $(NF-2)}&#039; &lt;filename>
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用