#file test.txt
a b c 5
d e f g h 7
gg jj 2
说X = 3我需要这样的输出:
#file out.txt
a b c 5
d e f 7
gg jj 2
不是这个:
a b c 5
d e f 7
gg jj 2 2 <--- WRONG
我已经到了这个阶段:
cat test.txt | awk ' { print $1" "$2" "$3" "NF } '
答案 0 :(得分:2)
如果您不确定字段总数,那么一个选项就是使用循环:
awk '{ for (i = 1; i <= 3 && i < NF; ++i) printf "%s ", $i; print $NF }' file
使用三元组可以避免循环:
awk '{ print $1, $2, (NF > 3 ? $3 OFS $NF : $3) }' file
这比the approach suggested by 123稍微冗长,但意味着你不会在有三个字段的行上留下尾随空白。 OFS
是输出字段分隔符,默认情况下为空格,这是print
在使用,
时在字段之间插入的内容。
答案 1 :(得分:1)
使用$
结合NF
:
cat test.txt | awk ' { print $1" "$2" "$3" "$NF } '