расширить сценарий awk для нескольких строк в обоих текстовых файлах, а не если оба файла имеют только одну запись
Я МОГУ сгенерировать этот вывод 3 .txt
AA;BB;CC;DD;
из 2-х текстовых файлов. Оба файла содержат только одну запись
1 .txt
AA;BB;
2 .txt
CC;DD;BB;AA;
Я использую этот скрипт awk.
BEGIN{
FS=OFS=";"
}
{
for(i=1;i<=NF;i++){
if(!seen[$i]++){ val=(val?val OFS:"")$i }
}
print val
delete seen
val=""
}
Я использую таким образом, я использую pasteкоманду для объединения обоих файлов, а затем обрабатываю его вывод по awkкоманде.
paste 1st.txt 2nd.txt | awk -f tst.awk > "3.txt"
Но чего я хочу?
Мне нужно рассмотреть больше одной записи. Я пытаюсь адаптировать этот сценарий к этой ситуации. Как видите, теперь в обоих файлах есть не только отдельные записи.
1 .txt
UU;
AA;BB;
ZZ;KK;
2 .txt
CC;DD;BB;AA;
LL;KK;
GH;ZZ;SS;
вывод 3 .txt, который я пытаюсь сгенерировать, это
UU;
AA;BB;CC;DD;
ZZ;KK;LL;GH;SS;
логика обработки:
В приведенном выше коде просто используются буквальные строки при поиске по хешу индексов массива, поэтому ему все равно, какие символы вы вводите.
Однако о выходе образца: если в 2 .txt есть общие поля также в 1 .txt.for примере , BB;AA;то вам нужно объединить их в один ряд, то есть AA;BB;CC;DD; Упорядочивание не требуется, например, не актуально, если вывод - BB;AA;DD;CC;Только обязательное условие - избегать дублирования полей в одной строке
Когда я говорю «избегать дубликатов», я имею в виду «избегать этого вывода»
AA;BB;CC;DD;BB;AA;
потому что вывод должен быть
AA;BB;CC;DD;
Ответы
Может быть, это то, что вы хотите:
BEGIN{FS=OFS=";"}
{sub(/;$/,"")} NR==FNR{ for (i=1;i<=NF;++i) for (j=1;j<=NF;++j) if (j!=i&&!b[$i,$j]++) a[$i,++c[$i]]=$j
next
}
{
delete b
for (i=1;i<=NF;++i)
++b[$i] for (i=1;i<=NF;++i) for (j=1;j<=c[$i];++j)
if (!b[a[$i,j]]++) $(NF+1)=a[$i,j]
print
}
Используйте это так:
awk -f script.awk 2.txt 1.txt
Вот несколько предыдущих вопросов (предположительно, ваши - возможно, вы захотите просмотреть их и поработать, как правильно задать свой вопрос):
- https://superuser.com/q/1600078
- awk: сохранить порядок строк и удалить повторяющиеся строки (зеркала) при генерации данных
- https://superuser.com/q/1600557
- https://superuser.com/q/1601402
- https://superuser.com/q/1602713
- https://stackoverflow.com/q/64929865
- https://superuser.com/q/1604046
- Динамические регулярные выражения в awk
- Усечение строк после запуска сценария awk