сawk
:
awk -F, '{
printf $1 FS $2 FS;
split($3, arr, / +/); for(val in arr) !uniq_arr[ arr[val] ]++;
for (key in uniq_arr) {
printf (key!="")? SPACE key:""; SPACE=" "; delete uniq_arr[key]
};
printf FS $4"\n"
}' infile
[1], Value1, UAC, AB
[2.2], Check1, D2A BOH, SD
[63], name2, MFB, k
Это split($3, arr, / +/)
разбивает столбец #3 на массив arr
на основе разделителя пробелов (, может быть один -или -больше пробелов в качестве разделителя ).
В for(val in arr) !uniq_arr[ arr[val] ]++
мы создаем новый массив с удаленными повторяющимися значениями, взятыми из массива arr
; поэтому окончательные значения в массиве uniq_arr
являются уникальными значениями только в каждом столбце3.
затем мы просто печатаем сохраненные значения в uniq_arr
и удаляем этот ключ после того, как он напечатан; обратите внимание, что значения столбцов #1, #2 и #4 печатались отдельно.
см. также:
Выбирай:
$ awk -v RS= -F': |\n' -v OFS='\t' 'NR==1{print $1, $3} {print $2, $4}' file
Student Name Roll Num
abc 123
xyz 124
$ awk -v RS= -F': |\n' -v OFS='\t' 'NR==1{print $1, $3} {print $2, $4}' file | column -s$'\t' -t
Student Name Roll Num
abc 123
xyz 124
$ awk -v RS= -F': |\n' -v fmt='%-13s %-13s\n' 'NR==1{printf fmt, $1, $3} {printf fmt, $2, $4}' file
Student Name Roll Num
abc 123
xyz 124
Method1
awk 'BEGIN{print "Student Name";RS="Student Name:"}{print $1}' p.txt| awk '$0 !~ /^$/' >student.txt
awk 'RS="Roll Num"{print $2}' p.txt|sed '/Name/,/^$/d'| awk 'BEGIN {print "Roll Num"}{print $0}' > roll.txt
paste student.txt roll.txt
output
Student Name Roll Num
abc 123
xyz 124
Method2
awk 'BEGIN{print "Student Name"}{if($1 ~ /Student/){print $3}}' p.txt > student.txt
awk 'BEGIN{print "Roll Num"}{if($1 ~ /Roll/){print $3}}' p.txt > roll.txt
paste student.txt roll.txt
output
Student Name Roll Num
abc 123
xyz 124