我试图从DBGVIEW日志文件中删除前两列(其中我不感兴趣)。 我似乎无法找到,从第3列打印开始直到行末的例子。 请注意,每一行都有可变的列数。
Answer 1:
...或者简单的解决方案: cut -f 3- INPUTFILE
只是添加正确的分隔符(-d)和你有同样的效果。
Answer 2:
awk '{for(i=3;i<=NF;++i)print $i}'
Answer 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/
Answer 4:
乔纳森·范伯格的答案打印在单独一行上每个字段。 你可以使用printf
重建记录在同一个线路输出,但你也可以只移动领域的跳转到左边。
awk '{for (i=1; i<=NF-2; i++) $i = $(i+2); NF-=2; print}' logfile
Answer 5:
awk '{$1=$2=$3=""}1' file
注:此方法将留在1,2,3领域的“空白”,而不是一个问题,如果你只是想看看输出。
Answer 6:
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)}'
例如。 与几乎所有的文件,只要他们不使用十六进制字符NR效果很好。 1行的内侧。
Answer 7:
什么下面一行:
awk '{$1=$2=$3=""; print}' file
基于@ ghostdog74建议。 煤矿应该表现更好,当你过滤线,即:
awk '/^exim4-config/ {$1=""; print }' file
Answer 8:
如果你要打印在同一行的第三个例如后列,你可以使用:
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
正如我们所看到的,工资单即使有空间,显示了正确的路线。
Answer 9:
下面AWK命令打印在该行的末尾的每一行的最后N个字段打印新行字符:
awk '{for( i=6; i<=NF; i++ ){printf( "%s ", $i )}; printf( "\n"); }'
发现下面列出了/ 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( "\n"); }'
Jan 14 2014 bcomps
Jan 14 2014 acyclic
May 22 2014 skype
Answer 10:
那么,你可以使用正则表达式容易达到相同的效果。 假定分隔符是空格,它看起来像:
awk '{ sub(/[^ ]+ +[^ ]+ +/, ""); print }'
Answer 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:]) + '\n') for line in sys.stdin]" < file
Answer 12:
awk '{a=match($0, $3); print substr($0,a)}'
首先,你找到第三列的起始位置。 随着SUBSTR您将打印整条生产线($ 0)开始的位置(在这种情况下),以该行的末尾。
Answer 13:
有点晚了这里,但没有上述的似乎工作。 试试这个,用printf,每次插入之间的间隔。 我选择了在年底前不会有新行。
awk '{for(i=3;i<=NF;++i) printf("%s ", $i) }'
Answer 14:
awk '{for (i=4; i<=NF; i++)printf("%c", $i); printf("\n");}'
从第4场以相同的顺序开始到最后现场打印的记录,他们在原来的文件
Answer 15:
在bash,那么你可以使用带有位置参数的语法如下:
while read -a cols; do echo ${cols[@]:2}; done < file.txt
了解更多: 处理位置参数在打击黑客的Wiki
Answer 16:
如果只有约忽略了前两个字段,如果屏蔽这些字段(如上面的一些做的答案),当您不想要一个空间:
awk '{gsub($1" "$2" ",""); print;}' file
Answer 17:
awk '{$1=$2=""}1' FILENAME | sed 's/\s\+//g'
前两个栏都被清零, sed
删除前导空格。
Answer 18:
在AWK列称为字段,因此NF是关键
所有行:
awk -F '<column separator>' '{print $(NF-2)}' <filename>
只有第一行:
awk -F '<column separator>' 'NR<=1{print $(NF-2)}' <filename>