awkは区切り記号によって異なる列を取り出す
bashコードを見てください.
説明:上記のコードは、指定ディレクトリの下に指定するファイルを実現し、異なる区切り記号に基づいて、異なる列を取り出し、結果をxxxに保存する.bakファイルにあります.
キー:区切り記号が異なるため、取った列が異なり、awkでパラメータ値に基づいて異なる列を取り出すため、書き方が特殊です.特に以下に記す.
awk -F "$1""{print\$$n1\"\t\"\$$n2/$n3}"temp > temp2
上記の意味は、n 1列目とn 2列目を取り出し、中間をタブで区切り、ここでn 1とn 2の値は、区切り記号によって異なる値に設定されることを意味する.またn 2列目のデータについては,それを1000で割って取り出した.
#!/bin/bash
# get "orderno" and "order_money" from datafile of thisside or otherside, save the result to file xxx.bak
# :
function get_orderNo_orderMoney()
{
if [ $1 == "|" ]; then
let n1=1
let n2=3
let n3=1000
elif [ $1 == "," ]; then
let n1=2
let n2=6
let n3=1
else
echo "Unrecognized separator"
exit 1
fi
for i in $*
do
if [ $i != $1 ]; then
cp $i temp
dos2unix temp
if [ $1 == "," ]; then
sed '1d' temp > temp2
mv temp2 temp
fi
awk -F "$1" "{print \$$n1 \"\t\" \$$n2/$n3}" temp > temp2
sort temp2 > temp
fname="result/`basename $i`.bak"
mv temp $fname
fi
done
}
get_orderNo_orderMoney "|" ebm/*.txt
get_orderNo_orderMoney "," junbao/*.txt
rm -f temp*
説明:上記のコードは、指定ディレクトリの下に指定するファイルを実現し、異なる区切り記号に基づいて、異なる列を取り出し、結果をxxxに保存する.bakファイルにあります.
キー:区切り記号が異なるため、取った列が異なり、awkでパラメータ値に基づいて異なる列を取り出すため、書き方が特殊です.特に以下に記す.
awk -F "$1""{print\$$n1\"\t\"\$$n2/$n3}"temp > temp2
上記の意味は、n 1列目とn 2列目を取り出し、中間をタブで区切り、ここでn 1とn 2の値は、区切り記号によって異なる値に設定されることを意味する.またn 2列目のデータについては,それを1000で割って取り出した.