我正在尝试从一个DbgView日志文件中删除前两列(我对它们不感兴趣)。我似乎找不到一个例子,可以从第三列开始打印直到行的末尾。请注意,每行具有可变数量的列。
我试图从一个 DbgView 日志文件中删除前两列(我对它们不感兴趣)。我似乎找不到一个示例,可以从第三列开始打印,一直到行的末尾。请注意,每行的列数是不确定的。我正在尝试从一个DbgView日志文件中删除前两列(我对它们不感兴趣)。我似乎找不到一个例子,可以从第三列开始打印直到行的末尾。请注意,每行具有可变数量的列。
我试图从一个 DbgView 日志文件中删除前两列(我对它们不感兴趣)。我似乎找不到一个示例,可以从第三列开始打印,一直到行的末尾。请注意,每行的列数是不确定的。...或者更简单的解决方案:cut -f 3- INPUTFILE
,只需添加正确的分隔符(-d),就可以得到相同的效果。
awk '{for(i=3;i<=NF;++i)print $i}'
awk '{for(i=3;i<=NF;++i)printf $i""FS ; print ""}'
(其中printf
不会打印换行符,而print ""
则会在其他字段被打印后添加换行符)。 - lauhubecho $(seq 1 10) | awk '{for (i=3; i<=NF; i++) printf $i FS}'
,其输出结果为:3 4 5 6 7 8 9 10
。 - x-yuriawk '{ print substr($0, index($0,$3)) }'
# 从$3(包括)到$6(不包括);
echo "1,2,3,4,5,6,7,8,9" | awk 'BEGIN{FS=",";OFS=","}{ print substr($0, index($0,$3), length($0)-index($0,$6)-1) }'; # 输出
3,4,5
- splaisanJonathan Feinberg的答案将每个字段都打印在单独的行上。您可以使用printf
重新构建记录以在同一行上输出,但您也可以将字段向左跳一个位置。
awk '{for (i=1; i<=NF-2; i++) $i = $(i+2); NF-=2; print}' logfile
NF
的方法。 - kvantourawk '{$1=$2=$3=""}1' file
注意:此方法会在第1、2、3个字段中留下“空白”,但如果您只想查看输出结果,则不会有问题。| sed s/^\ *// | column -t
以去除前导空格并对齐剩余列。 - MSpreij1
代表什么意思?我应该用什么关键字搜索 awk
? - Itachi{$1=$2=$3="";$0=$0;$1=$1}1
来解决这个问题。 - kvantour如果你想要在同一行打印出第三列之后的列,你可以使用:
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
正如我们所看到的,即使有空格,工资单也会按正确的行显示。
以下是需要翻译的内容:
以下这一行指令是干什么用的:
awk '{$1=$2=$3=""; print}' file
这是根据@ghostdog74的建议编写的指令,当你过滤行时,它应该表现得更好,即:
awk '/^exim4-config/ {$1=""; print }' file
sed 's/\s\+//g'
来删除前导空格。 - jumping_monkeyawk -v m="\x0a" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
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)}'
awk '{a=match($0, $3); print substr($0,a)}'
首先你需要找到第三列开始的位置。通过substr函数,你可以从该位置开始打印整行($0),直到末尾。
awk '{for( i=6; i<=NF; i++ ){printf( "%s ", $i )}; printf( "\n"); }'
$ 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