gpt4 book ai didi

awk - 根据特定列上的数据将数据文件划分为新文件

转载 作者:行者123 更新时间:2023-12-04 02:35:53 24 4
gpt4 key购买 nike

我有一个数据文件(data.txt)如下所示:

0  25  10  25000
1 25 7 18000
1 25 9 15000

0 20 9 1000
1 20 8 800
0 20 8 900

0 50 10 4000
0 50 5 2500
1 50 10 5000

我想将第二列中具有相同值的行复制到单独的文件中。我想获取以下三个文件:

数据.txt_25

0  25  10  25000
1 25 7 18000
1 25 9 15000

数据.txt_20

0  20  9   1000
1 20 8 800
0 20 8 900

data.txt_50

0  50  10  4000
0 50 5 2500
1 50 10 5000

我刚开始学习awk。我尝试了以下 bash 脚本:

  1 #!/bin/bash
2
3 for var in 20 25 50
4 do
5 awk -v var="$var" '$2==var { print $0 }' data.txt > data.txt_$var
6 done

虽然 bash 脚本执行了我希望它执行的操作,但它非常耗时,因为我必须手动将第二列数据的值放入第 3 行。

所以我想用 awk 来做这件事。我如何使用 awk 实现此目的?

提前致谢。

最佳答案

您能否尝试以下操作,这认为您的第 2 列编号未按排序形式排列。

sort -k2 Input_file | 
awk '
prev!=$2{
close(output_file)
output_file="data.txt_"$2
}
{
print > (output_file)
prev=$2
}'

如果您的 Input_file 的第二列已排序,则无需使用排序,您可以直接使用:

awk '
prev!=$2{
close(output_file)
output_file="data.txt_"$2
}
{
print > (output_file)
prev=$2
}' Input_file

说明:为以上添加详细说明。

sort -k2 Input_file |            ##Sorting Input_file with respect to 2nd column then passing output to awk
awk ' ##Starting awk program from here.
prev!=$2{ ##Checking if prev variable is NOT equal to $2 then do following.
close(output_file) ##Closing output_file in back-end to avoid "too many files opened" errors.
output_file="data.txt_"$2 ##Creating variable output_file to data.txt_ with $2 here.
}
{
print > (output_file) ##Printing current line to output_file here.
prev=$2 ##Setting variable prev to $2 here.
}'

关于awk - 根据特定列上的数据将数据文件划分为新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61884118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com