OS -红帽企业Linux 8.2 (Ootpa)
下面是我的平面图。
G010XX OLTP PDOA210105210304210105000000000000000000000000F
G2019998199916 86010027472 XXXLXXSEXXX860 XXUPMU TEST
G2019998199916 86010027472 XXXLXXSEXXX860 XXUPMU TEST
G2019998199916 86010027472 XXXLXXSEXXX860 XXUPMU TEST
G2019998199916 86010027524 XXXLXXSEXXX860 XXUPMU TEST
G2019998199916 86010027524 XXXLXXSEXXX860 XXUPMU TEST
G2019998199916 86010027524 XXXLXXSEXXX860 XXUPMU TEST
G2029998199916 86010027472 XXXLXXSEXXXXXW-00000000000000000
G2029998199916 86010027472 XXXLXXSEXXXXXW-00000000000000001
G2029998199916 86010027472 XXXLXXSEXXXXXW000000000039213488
G2029998199916 86010027524 XXXLXXSEXXXXXW000000000000000000
G2029998199916 86010027524 XXXLXXSEXXXXXW000000000000000002
G2029998199916 86010027524 XXXLXXSEXXXXXW000000000000099357
G2039998199916 86010027472 XXXLXXSEXXXXXW201210201210095900
G2039998199916 86010027472 XXXLXXSEXXXXXW201210201210110141
G2039998199916 86010027472 XXXLXXSEXXXXXW201210201210141946
G2039998199916 86010027524 XXXLXXSEXXXXXW201210201210163210
G2039998199916 86010027524 XXXLXXSEXXXXXW201211201211141445
G2039998199916 86010027524 XXXLXXSEXXXXXW201211201211144629
G2049998199916 86010027472 XXXLXXSEXXXXXW201210201210095900
G2049998199916 86010027472 XXXLXXSEXXXXXW201210201210110141
G2049998199916 86010027472 XXXLXXSEXXXXXW201210201210141946
G2049998199916 86010027524 XXXLXXSEXXXXXW201210201210163210
G2049998199916 86010027524 XXXLXXSEXXXXXW201211201211141445
G2049998199916 86010027524 XXXLXXSEXXXXXW201211201211144629
G020000011140000000000000000000000.000 71-88交易日期详细信息(仅适用于记录类型G203和G204)
我的要求是
根据帐户number
预期产出
G010XX OLTP PDOA210105210304210105000000000000000000000000F
G2019998199916 86010027472 XXXLXXSEXXX860 XXUPMU TEST
G2029998199916 86010027472 XXXLXXSEXXXXXW-00000000000000000
G2039998199916 86010027472 XXXLXXSEXXXXXW201210201210095900
G2049998199916 86010027472 XXXLXXSEXXXXXW201210201210095900
G2039998199916 86010027472 XXXLXXSEXXXXXW201210201210110141
G2049998199916 86010027472 XXXLXXSEXXXXXW201210201210110141
G2039998199916 86010027472 XXXLXXSEXXXXXW201210201210141946
G2049998199916 86010027472 XXXLXXSEXXXXXW201210201210141946
G2019998199916 86010027524 XXXLXXSEXXX860 XXUPMU TEST
G2029998199916 86010027524 XXXLXXSEXXXXXW000000000000000000
G2039998199916 86010027524 XXXLXXSEXXXXXW201210201210163210
G2049998199916 86010027524 XXXLXXSEXXXXXW201210201210163210
G2039998199916 86010027524 XXXLXXSEXXXXXW201211201211141445
G2049998199916 86010027524 XXXLXXSEXXXXXW201211201211141445
G2039998199916 86010027524 XXXLXXSEXXXXXW201211201211144629
G2049998199916 86010027524 XXXLXXSEXXXXXW201211201211144629
G020000011140000000000000000000000.000 我试过两种方法。但没有得到想要的输出。oa是我的档案名。
[tmp] $ (
> grep "^G010" oa && \
> ( \
> grep "^G201" oa|sort -u -k 1.1,1.4 -k 1.23,1.56 && \
> grep "^G202" oa|sort -u -k 1.1,1.4 -k 1.23,1.56 && \
> grep -E "^(G203|G204|G205|G206)" oa | sort -k 1.23,1.56 -k 2.71,2.88 -k 3.1,3.4 \
> ) && \
> grep "^G020" oa
> )
G010KR OLTP PDOA210105210304210105000000000000000000000000F
G2019998199916 86010027472 SCBLKRSEXXX860 KRUPMU TEST
G2019998199916 86010027524 SCBLKRSEXXX860 KRUPMU TEST
G2029998199916 86010027472 SCBLKRSEXXXKRW-00000000000000000
G2029998199916 86010027524 SCBLKRSEXXXKRW000000000000000000
G2039998199916 86010027472 SCBLKRSEXXXKRW201210201210110141
G2049998199916 86010027472 SCBLKRSEXXXKRW201210201210110141
G2039998199916 86010027472 SCBLKRSEXXXKRW201210201210141946
G2049998199916 86010027472 SCBLKRSEXXXKRW201210201210141946
G2039998199916 86010027472 SCBLKRSEXXXKRW201210201210095900
G2049998199916 86010027472 SCBLKRSEXXXKRW201210201210095900
G2039998199916 86010027524 SCBLKRSEXXXKRW201211201211141445
G2049998199916 86010027524 SCBLKRSEXXXKRW201211201211141445
G2039998199916 86010027524 SCBLKRSEXXXKRW201210201210163210
G2049998199916 86010027524 SCBLKRSEXXXKRW201210201210163210
G2039998199916 86010027524 SCBLKRSEXXXKRW201211201211144629
G2049998199916 86010027524 SCBLKRSEXXXKRW201211201211144629
G020000011140000000000000000000000.000
[tmp] $ (
> grep "^G010" oa && \
> ( \
> grep "^G201" oa|sort -u -k 1.1,1.4 -k 1.23,1.56 && \
> grep "^G202" oa|sort -u -k 1.1,1.4 -k 1.23,1.56 && \
> grep -E "^(G203|G204|G205|G206)" oa | sort -k 1.23,1.56 -k 2.71,2.88 -k 3.1,3.4 \
> ) | sort -k 1.23,1.56 && \
> grep "^G020" oa
> )
G010KR OLTP PDOA210105210304210105000000000000000000000000F
G2019998199916 86010027472 SCBLKRSEXXX860 KRUPMU TEST
G2029998199916 86010027472 SCBLKRSEXXXKRW-00000000000000000
G2039998199916 86010027472 SCBLKRSEXXXKRW201210201210095900
G2039998199916 86010027472 SCBLKRSEXXXKRW201210201210110141
G2039998199916 86010027472 SCBLKRSEXXXKRW201210201210141946
G2049998199916 86010027472 SCBLKRSEXXXKRW201210201210095900
G2049998199916 86010027472 SCBLKRSEXXXKRW201210201210110141
G2049998199916 86010027472 SCBLKRSEXXXKRW201210201210141946
G2019998199916 86010027524 SCBLKRSEXXX860 KRUPMU TEST
G2029998199916 86010027524 SCBLKRSEXXXKRW000000000000000000
G2039998199916 86010027524 SCBLKRSEXXXKRW201210201210163210
G2039998199916 86010027524 SCBLKRSEXXXKRW201211201211141445
G2039998199916 86010027524 SCBLKRSEXXXKRW201211201211144629
G2049998199916 86010027524 SCBLKRSEXXXKRW201210201210163210
G2049998199916 86010027524 SCBLKRSEXXXKRW201211201211141445
G2049998199916 86010027524 SCBLKRSEXXXKRW201211201211144629
G020000011140000000000000000000000.000发布于 2021-01-08 09:36:55
Awk将是这方面的理想人选(用于数组排序的GNU awk ):
awk 'NR==1 { print;next } $3 == "" { endline=$0;next } { code=substr($1,1,4);map[code][$2][$3]=$0} END {PROCINFO["sorted_in"]="@ind_str_asc";for (i in map) { for (j in map[i]) { for (k in map[i][j]) { print map[i][j][k] } } } print endline }' ootpafile解释:
awk 'NR==1 {
print; # Print the line
next # Skip to the next line
}
$3 == "" {
endline=$0; # Set a variable endline to the current line where the 3rd space delimited field is empty
next
}
{
code=substr($1,1,4); # Extract the first 4 characters into a variable code
map[code][$2][$3]=$0 # Store the line in a 3 dimentional array indexed by code and other fields
}
END {
PROCINFO["sorted_in"]="@ind_str_asc"; # Set the ordering of the array
for (i in map) {
for (j in map[i]) {
for (k in map[i][j]) {
print map[i][j][k] # Loop through the array and print the entries
}
}
}
print endline # Print the end line
}' ootpahttps://stackoverflow.com/questions/65624943
复制相似问题