awkは区切り記号によって異なる列を取り出す


bashコードを見てください.
#!/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で割って取り出した.