友
我正在尝试编写一个脚本,该脚本将从文件中取两个字段(由'。'分隔)并交换它们并将它们插入另一个文件中。该程序将用于n个记录。下面给出了脚本
#!/bin/ksh
k=`wc -l file1|cut -d' ' -f1`
i=1
while [ $i -le $k ]
do
var1=`awk 'BEGIN {FS = "."};{print $2}' file1|head -$i|tail -1`
var2=`awk 'BEGIN {FS = "."};{print $1}' file1|head -$i|tail -1`
c="$var1.$var2"
echo $c >> results.txt
i=$i+1
done
我在head命令中收到以下错误。你能帮帮我吗?
head:无法识别的选项-+'
Try
head --help'了解更多信息。
答案 0 :(得分:3)
您编写的内容只需一个awk
命令就可以处理:
awk 'BEGIN {FS=OFS="."} {print $2, $1 > "resultst.txt"}' file1
答案 1 :(得分:3)
原因是第i=$i+1
行将i
转换为1+1
,然后转换为1+1+1
,依此类推。
为什么不使用:
awk 'BEGIN {FS="."};{print $2"."$1}' <file1 >results.txt
答案 2 :(得分:1)
我怀疑你的shell并不完全清楚你的意思:
i=$i+1
因此i
获得值+
或类似值。尝试使用expr
(查看您的手册页)
顺便说一句 - 你的方法是完全错误的,整个事情应该是一个简洁,琐碎的awk脚本。
答案 3 :(得分:0)
这个sed会起到作用:
sed -e 's/\(.*\)\.\(.*\)/\2.\1/' file1 > results.txt
它匹配由点分隔的两个子表达式,然后交换引用。请注意,在左侧,您必须转义点,否则它将被解释为正则表达式的一部分,而右侧则不需要。