我必须将带有空格作为分隔符的文件批量加载到Oracle数据库中。问题是任何字段都包含空格,如此
os linux good 1
os mac good 1
os windows bad 3
os unknown not clear 0
我尝试过这个Awk命令,但它也替换了字段本身的空格
cslamdi0416:~ user1$ awk '$1=$1' FS=" " OFS="|" myfile
os|linux|good|1
os|mac|good|1
os|windows|bad|3
os|unknown|not|clear|0
我不想要那个。有没有办法产生这个输出
os linux|good|1
os mac|good|1
os windows|bad|3
os unknown|not clear|0
??我相信我需要使用NF变量来指定字段数,但我不清楚如何做到这一点。谢谢你的帮助。
答案 0 :(得分:1)
awk -v OFS="|" ' NF==4 {print $1" " $2, $3, $4} NF!=4 {print "Error in fmt:" $0}' file
应符合您的要求。
<强>输出强>
os linux|good|1
os mac|good|1
os windows|bad|3
第二个块突出显示任何不包含4个字段的记录。如果您不想要错误消息,请替换为
NF!=4 {print}
IHTH
答案 1 :(得分:0)
awk '{print $1" "$2"|"$3"|"$4}' FS=" " myfile
输出:
os linux|good|1
os mac|good|1
os windows|bad|3
另一种仅将第一个与space
分开,其余与|
分开的方法是:
awk '{for (i=1; i<=NF; i++) if(i==1) {printf "%s ", $i} else if(i==NF) {printf "%s\n", $i} else {printf "%s|", $i}}' myfile