awk按分隔符的不同取出不同的列

本文介绍了一段Bash脚本代码,该脚本能够根据不同分隔符从指定目录下的文件中提取订单号和金额(统一转换为元),并将处理后的结果保存到特定的.bak文件中。代码通过判断分隔符类型来确定读取哪些列,同时针对金额进行了单位换算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看下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

 上面的意思是取出第n1和n2列,中间以制表符分开,其中n1和n2的值根据分隔符的不同设定为不同的值。而且对于第n2列的数据,是将其除以1000后再取出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值