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后再取出来的。

### 回答1: awk命令可以用来截取出指定字段。具体操作如下: 1. 使用awk命令时,需要指定分隔符,通常使用空格或制表符作为分隔符2. 使用awk命令时,需要指定要截取的字段,可以使用$符号加上字段编号来指定。 例如,如果要截取出文件中第二的内容,可以使用以下命令awk '{print $2}' filename 其中,$2表示第二,print表示输出的内容,filename表示要操作的文件名。 3. 如果要截取出多个字段,可以使用逗号分隔多个字段编号。 例如,如果要截取出文件中第二和第三的内容,可以使用以下命令awk '{print $2,$3}' filename 其中,$2和$3表示第二和第三,逗号分隔表示输出这两的内容,filename表示要操作的文件名。 4. 如果要根据某个条件来截取字段,可以使用if语句来实现。 例如,如果要截取出文件中第二大于10的行的内容,可以使用以下命令awk '{if($2>10) print $}' filename 其中,$表示整行内容,if语句判断第二是否大于10,如果是则输出整行内容,filename表示要操作的文件名。 ### 回答2: 在Unix和Linux操作系统中,awk命令是一种用于文本处理的强大工具,它可以抽取或截取指定的字段,并将其打印出来。awk命令是一种面向行的语言,它按照行处理文件或输入流,可以自动处理文件的每一行,并通过字段的分隔符将其分成不同的部分。 在 awk 命令中,我们可以使用 $ 字符来引用每个字段。例如,$1代表第一个字段,$2代表第二个字段,以此类推。另外,我们还可以使用特定的分隔符来划分字段。默认的分隔符是空格,但是我们可以通过使用-F选项来指定其他字符作为分隔符,例如-F':'代表使用冒号作为分隔符。 以下是一个示例 awk 命令,用于从文件中提取姓名和年龄字段: ``` awk -F':' '{print $1, $3}' filename ``` 在此命令中,-F':'表明使用冒号作为分隔符,$1和$3代表第一和第三个字段,而print语句则打印出所选字段。 另外,我们还可以使用其它条件来过滤和选取数据,例如awk的if语句,可以根据条件过滤出符合要求的数据。 总的来说,awk命令是一种非常强大的文本处理工具,能够对大量文本数据进行快速处理,并提取所需的信息。在实际的数据处理过程中,使用 awk 命令可以大大提高工作效率,是工程师和研发人员不可或缺的工具之一。 ### 回答3: awk是一种文本处理工具,可以用来从文本文件中提取数据并进行分析。它可以将输入文件逐行读取,并进行特定的处理操作。其中,最常用的操作是截取出指定字段。 下面是一个示例命令: ``` awk '{print $3}' testfile.txt ``` 在这个命令中,awk读取名为testfile.txt的文件,并从中提取第3个字段。其中,字段是以空格或制表符作为分隔符的序awk命令可以使用不同分隔符来截取字段。例如,使用冒号作为分隔符: ``` awk -F: '{print $1}' testfile.txt ``` 在这个命令中,awk读取testfile.txt文件,并使用冒号作为分隔符来提取第一个字段。 除了提取单个字段之外,awk还可以根据条件进行过滤和筛选。例如,根据第4个字段的值进行筛选: ``` awk '$4 > 20 {print $1,$4}' testfile.txt ``` 在这个命令中,awk只会输出第4个字段的值大于20的行,并且只会提取第1个和第4个字段的值。 总之,awk命令可以用来从文本文件中提取数据,并可以使用不同分隔符和条件进行筛选和过滤。它是一种非常强大和灵活的文本处理工具,在数据处理和文本分析中得到了广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值