这一行一直工作到第二个字段中出现空白。
svn status | grep '\!' | gawk '{print $2;}' > removedProjs
有没有办法让awk打印所有2美元或更大的东西?(3、4美元. .直到我们不再有专栏了?)
我想我应该补充一点,我正在使用Cygwin在Windows环境中执行此操作。
这一行一直工作到第二个字段中出现空白。
svn status | grep '\!' | gawk '{print $2;}' > removedProjs
有没有办法让awk打印所有2美元或更大的东西?(3、4美元. .直到我们不再有专栏了?)
我想我应该补充一点,我正在使用Cygwin在Windows环境中执行此操作。
当前回答
echo "1 2 3 4 5 6" | awk '{ $NF = ""; print $0}'
它使用awk打印除最后一个字段以外的所有字段
其他回答
如果你想要格式化文本,用echo链接你的命令并使用$0打印最后一个字段。
例子:
for i in {8..11}; do
s1="$i"
s2="str$i"
s3="str with spaces $i"
echo -n "$s1 $s2" | awk '{printf "|%3d|%6s",$1,$2}'
echo -en "$s3" | awk '{printf "|%-19s|\n", $0}'
done
打印:
| 8| str8|str with spaces 8 |
| 9| str9|str with spaces 9 |
| 10| str10|str with spaces 10 |
| 11| str11|str with spaces 11 |
打印从#2开始的列(输出在开始时没有尾随空格):
ls -l | awk '{sub(/[^ ]+ /, ""); print $0}'
有一个重复的问题,使用cut的答案更简单:
svn status | grep '\!' | cut -d\ -f2-
-d指定delimeter(空格),-f指定列列表(所有列都从第2个开始)
如果需要用任意delimeter打印特定列:
awk '{print $3 " " $4}'
同# 3 # 4
awk '{print $3 "anything" $4}'
与3anythingcol # 4
因此,如果您在一列中有空格,它将是两列,但您可以使用任何分隔符连接它或不使用它。
您可以使用for循环来循环打印字段$2到$NF(表示行上字段数量的内置变量)。
编辑: 由于"print"附加了换行符,你需要缓冲结果:
awk '{out = ""; for (i = 2; i <= NF; i++) {out = out " " $i}; print out}'
或者,使用printf:
awk '{for (i = 2; i <= NF; i++) {printf "%s ", $i}; printf "\n"}'