使用 awk sed 文件 1 进行关系列处理 ---> 列中的乱序数据(带有中间测试数据的旧陈旧文件)
mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
Iq4iqnH4UftLgGUSobLeti0hkmdMn7
BlzanDNcIsgru2wNYlO6kDjpuPvs82
eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
YuuRhD5f3xju0RnUCjS66g3X2TNNIj
MpJHtG8FjeErwsh6emcCu7B4bHwCnR
aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
nXgwlL0p8LEWNFGznIy2NUXBWHzZgS
文件2--->相同的数据,但按最终顺序(每年审核后的新文件并将中间数据更改为测试后的最终形式)
BlzanDNcIsgru2wNYlO6kDjpuPvs82
CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
Iq4iqnH4UftLgGUSobLeti0hkmdMn7
MpJHtG8FjeErwsh6emcCu7B4bHwCnR
YuuRhD5f3xju0RnUCjS66g3X2TNNIj
aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
nXgwlL0p8LEWNFGznIy2NUXBWHzZgS
尝试解释问题从现在开始,无论我们对 Final_results 文件进行什么处理,我们都希望在保留其顺序的中间测试文件中反映相同的更改
粘贴 <(cat temp_data | nl) <(cat Final_results) |柱子
1 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa 3 BlzanDNcIsgru2wNYlO6kDjpuPvs82
2 BlzanDNcIsgru2wNYlO6kDjpuPvs82 5 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
3 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7 6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
4 Iq4iqnH4UftLgGUSobLeti0hkmdMn7 2 Iq4iqnH4UftLgGUSobLeti0hkmdMn7
5 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f 8 MpJHtG8FjeErwsh6emcCu7B4bHwCnR
6 YuuRhD5f3xju0RnUCjS66g3X2TNNIj 7 YuuRhD5f3xju0RnUCjS66g3X2TNNIj
7 MpJHtG8FjeErwsh6emcCu7B4bHwCnR 9 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
8 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33 4 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
9 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd 1 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS 10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS
所需的关系处理。如果我更改 3 BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX ----> File2(上述命令中的第 2 列),则反映更改 6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-SUFFIX --->File1(上述命令中的第 1 列)
例如。测试前的 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7 现在 Fina_results 中的 BlzanDNcIsgru2wNYlO6kDjpuPvs82 。因此,现在无论我们在 Final 中对 BlzanDNcIsgru2wNYlO6kDjpuPvs82 执行什么操作,都应该反映在之前文件中的 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7 上
PROBLEM1 所需输出 1
1 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa 3 BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX
2 BlzanDNcIsgru2wNYlO6kDjpuPvs82 5 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
3 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-SUFFIX 6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
4 Iq4iqnH4UftLgGUSobLeti0hkmdMn7 2 Iq4iqnH4UftLgGUSobLeti0hkmdMn7
5 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f 8 MpJHtG8FjeErwsh6emcCu7B4bHwCnR
6 YuuRhD5f3xju0RnUCjS66g3X2TNNIj 7 YuuRhD5f3xju0RnUCjS66g3X2TNNIj
7 MpJHtG8FjeErwsh6emcCu7B4bHwCnR 9 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
8 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33 4 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
9 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd 1 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS 10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS
PROBLEM2 所需输出 2 将第二个文件转置为第一个文件。
请参阅粘贴命令输出 3 BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX 有 3。因此,在第一列中,第 3 行需要更改为第 4 列的第一行,第三列中有 3,同样整个输出转置列,最后输出更改后的数据
1 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd-Suffix
2 Iq4iqnH4UftLgGUSobLeti0hkmdMn7-Suffix
BlzanDNcIsgru2wNYlO6kDjpuPvs82-Suffix
4 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33-Suffix
5 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa-Suffix
6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-Suffix
7 YuuRhD5f3xju0RnUCjS66g3X2TNNIj-Suffix
8 MpJHtG8FjeErwsh6emcCu7B4bHwCnR-Suffix
9 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f-Suffix
10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS-Suffix
##简化数据(用于测试解决方案)
1 Mina_Warren 2 Ayden_Silva
2 Jazlene_Gibbs 4 Quintin_Glover
3 Kaleigh_Farley 1 Callum_Mckay
4 Callum_Mckay 7 Jazlene_Gibbs
5 Finn_Nelson 6 Mina_Warren
6 Ayden_Silva 3 Kaleigh_Farley
7 Quintin_Glover 5 Finn_Nelson
输出(仅适用于问题 1)
1 Mina_Warren--Suffix3 2 Ayden_Silva---Suffix1
2 Jazlene_Gibbs--Suffix1 4 Quintin_Glover--Suffix2
3 Kaleigh_Farley--Suffix6 1 Callum_Mckay--Suffix3
4 Callum_Mckay--Suffix2 7 Jazlene_Gibbs-Suffix4
5 Finn_Nelson--Suffix7 6 Mina_Warren--Suffix5
6 Ayden_Silva--Suffix5 3 Kaleigh_Farley--Suffix6
7 Quintin_Glover--Suffix4 5 Finn_Nelson-Suffix7
(仅适用于问题 1)此处后缀 --- 含义 ---> 任何类型的处理、编辑、重命名、替换等。某行第 4 列中的任何处理都将在第 n 行第 2 列中反映出来。 ---> 这里第n行是由第三列获得的
awk 问题 1 的逻辑 -- 读取第一条记录。 --将列 $4 存储在变量中,然后转到行号,如列 3 $3 中所示 --然后用从 $4 存储的变量替换列 $2
考虑
1 Mina_Warren 2 Ayden_Silva
2 Jazlene_Gibbs 4 Quintin_Glover
第三列是关系编辑的行号。 问题1的逻辑 读取第 1 行 ---> 将 Ayde _Silva 存储在变量中 ---> 转到第 2 行,因为第 1 行的 $3 中有 2 个 ---> 现在在第 2 行上对 Jazlene_Gibbs 进行相同的处理
期望输出问题1
Mina_Warren 2 Ayden_Silva--Suffix1
2 Jazlene_Gibbs--Suffix1 4 Quintin_Glover
问题2的逻辑转置读取第 1 行 ---> 将 Ayde _Silva 存储在变量中 ---> 转到第 2 行,因为第 1 行的 $3 中有 2 ---> 现在在第 2 行用 Ayde_Silve 的处理版本替换 Jazlene_Gibbs ---> 执行这些操作循环中的所有行 ---> 删除第 3 列和第 4 列
期望输出问题2
1 Callum_Mckay--Suffix3
2 Ayden_Silva--Suffix1
3 Kaleigh_Farley--Suffix6
4 Quintin_Glover--Suffix2
5 Finn_Nelson--Suffix7
6 Mina_Warren--Suffix5
7 Jazlene_Gibbs--Suffix4
尝试过
in="$(awk 'END { print NR }' 1)" file
awk -v ty=$in '{for (i=1;i<=ty;i++) NR==$i; var=$4; varb=$3; NR == varb; $2=var; print}' file
但没有按照预期的逻辑工作,我尝试做的是 in = 这里的记录总数 7 然后使用 for 循环循环 7 次---> i =1; NR==1 ##goto rrcord 1 --> 将 $4 存储在 var 中,将 $3 存储在 varb 中 --> NR==varb ## 转到 varb 中指定的记录,例如 2。将 $2 替换为 var。循环 ---> i =2 转到记录 2,同样
答案1
使用CPAPWK:
这是一个刚刚在上个月开发的新产品。
cppawk
使用 C 预处理器进行预处理,为常规 Awk 生成输入,并附带一些用于类似 Lisp 的列表处理、奇特迭代和其他实用程序的库标头。
问题一:
#include <cons.h>
BEGIN {
bag = list_begin()
}
{
left[$1] = $2
right[$3] = $4
leftn[$3] = $1
bag = list_add(bag, $3)
}
END {
finlist = list_end(bag)
dolist (i, finlist)
{
left[i] = left[i] "--Suffix" ++suff
right[i] = right[i] "--Suffix" suff
}
dolist (i, finlist)
{
print leftn[i], left[leftn[i]], i, right[i]
}
}
输出:
cppawk -f prob-1.cwk prob-1-data
1 Mina_Warren--Suffix3 2 Ayden_Silva--Suffix1
2 Jazlene_Gibbs--Suffix1 4 Quintin_Glover--Suffix2
3 Kaleigh_Farley--Suffix6 1 Callum_Mckay--Suffix3
4 Callum_Mckay--Suffix2 7 Jazlene_Gibbs--Suffix4
5 Finn_Nelson--Suffix7 6 Mina_Warren--Suffix5
6 Ayden_Silva--Suffix5 3 Kaleigh_Farley--Suffix6
7 Quintin_Glover--Suffix4 5 Finn_Nelson--Suffix7
问题2:
#include <cons.h>
BEGIN {
bag = list_begin()
}
{
left[$1] = $2
right[$3] = $4
leftn[$3] = $1
bag = list_add(bag, $3)
}
END {
finlist = list_end(bag)
dolist (i, finlist)
{
left[i] = right[i] "--Suffix" ++suff
}
dolist (i, finlist)
{
print leftn[i], left[leftn[i]]
}
}
输出:
cppawk -f prob-2.cwk prob-1-data
1 Callum_Mckay--Suffix3
2 Ayden_Silva--Suffix1
3 Kaleigh_Farley--Suffix6
4 Quintin_Glover--Suffix2
5 Finn_Nelson--Suffix7
6 Mina_Warren--Suffix5
7 Jazlene_Gibbs--Suffix4