$ awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]>1' file.txt file.txt
spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
spark2-thrift-sparkconf,spark.history.fs.logDirectory,true
Обработка двух файлов с использованием одного и того же входного файла дважды
NR==FNR{a[$1,$2]++; next}
используя первые два поля в качестве ключа, сохранить количество вхождений a[$1,$2]>1
печатать, только если count больше 1 во время второго прохода
Для противоположного случая простой вопрос проверки изменения условия
$ awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]==1' file.txt file.txt
spark2-thrift-sparkconf,spark.history.Log.logDirectory,true
spark2-thrift-sparkconf,spark.history.DF.logDirectory,true
Попробуйте:
$ sed -E 's@.*(/s-show)@https://www.testpage.com\1@' File
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show
Чтобы заменить файл на месте:
sed -Ei 's@.*(/s-show)@https://www.testpage.com\1@' File # GNU (Linux)
или:
sed -Ei '' 's@.*(/s-show)@https://www.testpage.com\1@' File # BSD (MacOS)
Как это работает:
-E
говорит sed использовать расширенные регулярные выражения. Это устраняет необходимость в некоторых escape-символах.
s@old@new@
— это команда замены, которая ищет регулярное выражение old
и заменяет его на new
.
В нашем случае old
— это .*(/s-show)
, который соответствует любому количеству любых символов, .*
, за которым следует /s-show
, где /s-show
сохраняется как группа 1.
В нашем случае new
— это https://www.testpage.com\1
, где \1
заменено на группу 1.