我正在玩 awk 而我正在尝试交换文件的前两个字段,如下所示:
awk -F : '/cjares/{temp=$1; $1=$2; $2=temp; print}' /etc/passwd
然而,输出不对。这是两个输出,一个没有交换字段,第二个是在交换字段之后:
x cjares 3158 115 Caleb Timothy Jares,256 Avery Hall,2-7763 /home/ugrad/cjares /bin/tcsh
cjares:x:3158:115:Caleb Timothy Jares,256 Avery Hall,2-7763:/home/ugrad/cjares:/bin/tcsh
它用空格替换所有分号。
答案 0 :(得分:1)
在awk中,默认输出字段分隔符(OFS)是一个空格“”。你可以改变它:
awk -F: 'BEGIN{OFS=":"} /cjares/{temp=$1; $1=$2; $2=temp; print}' /etc/passwd
答案 1 :(得分:-1)
不幸的是,你不会通过重新分配$ 1和$ 2来神奇地改变$ 0的值。 你需要明确告诉awk你想在这里打印什么。
这意味着您需要使用
显式重新生成该行打印$ 2,“:”,$ 1,“:”,$ 3,“:”......
或以类似方式使用printf。
sed可能是一个稍微好一点的赌注 - 您可以使用正则表达式替换来交换前两个字段。或者,您可以使用sub或gsub函数在awk中执行相同的操作,但这可能会更加痛苦。
顺便说一句,你可能想要/ cjares /和动作之间的空格。