что делает на скорую руку написанная фигня на Bash'е:
(вывод ТОЛЬКО совпадающих по ЗАДАННОМУ полю строк)
Файл (добавлена нумерация для наглядности):
1 hello, y-cat!
2 cat drank vodka
3 mom washed frame
4 dad drank vodka
5 123 456 789
6 Vova drowned
7 vova fool
8 cat drank vodka
9 mom at work
10 cat whore juvenile
11 hello, www!
12 petya the Fool
13 dad washed frame
14 Cat washed frame
15 cat vodka drank
16 cat drowned
17 cat the Fool
18 hello www!
#!/usr/bin/env bash
mapfile -O 1 a < <(cat "file" | nl | sort -k 2d)
i=0
f=0
for str in "${a[@]}"; do
(( i++ ))
mapfile fr < <(printf %s "${a[i]}" | awk '{print $2"\n"$0}')
mapfile sr < <(printf %s "${a[i+1]}" | awk '{print $2"\n"$0}')
if [[ "${fr[0]}" == "${sr[0]}" ]]; then
if (( f == 0 )); then
f=1
printf %s "${fr[1]}"
printf %s "${sr[1]}"
else
printf %s "${sr[1]}"
fi
else
f=0
fi
done
2 cat drank vodka
8 cat drank vodka
16 cat drowned
17 cat the Fool
15 cat vodka drank
10 cat whore juvenile
4 dad drank vodka
13 dad washed frame
9 mom at work
3 mom washed frame
(Проблему с сортировкой заметили?)
Дальше
awk 'BEGIN {i = 1} {ff = $1; f_l = $0; getline ; sf = $1; s_l = $0} {if (ff == sf) a[i] = f_l; a[i+1] = s_l; i = i +2 } END { (for i in a) print a[i]} ' file
Грамотные, подскажите КАК?