печатать повторяющиеся строки только в полях 1,2 из файла csv

Самый простой способ установить новое ядро ​​- использовать резервные порты Jessie .

Сначала вам нужно добавить резервные копии Jessie в свои репозитории, если их там еще нет:

echo deb http://http.debian.net/debian jessie-backports main > /etc/apt/sources.list.d/jessie-backports.list

(как root), тогда

apt-get update
apt-get -t jessie-backports install linux-image-amd64

установит текущее ядро ​​по умолчанию backported (на данный момент 4.8 пишу).

Чтобы обеспечить соответствующую прошивку для Wi-Fi вашего ноутбука, вам необходимо добавить non-free и установить firmware-iwlwifi :

echo deb http://http.debian.net/debian jessie-backports main contrib non-free > /etc/apt/sources.list.d/jessie-backports.list
apt-get update
apt-get -t jessie-backports install firmware-iwlwifi

Чтобы решить проблемы с отображением, вы может удалить xserver-xorg-video-intel (в настоящее время графическим процессорам Intel не нужен отдельный драйвер, они могут использовать поддержку настройки режима ядра), как предлагается GAD3R :

apt-get remove xserver-xorg-video-intel

(Вам может потребоваться установить xserver-xorg-video-dummy для удовлетворения зависимостей других пакетов.)

Вам также следует установить микропрограмму Skylake, чтобы включить все функции графического процессора:

apt-get -t jessie-backports install firmware-misc-nonfree

Включение backports безопасно: новые пакеты не выбираются автоматически из backports, вам нужно явно выбрать их, используя -t jessie-backports , как указано выше (но как только вы это сделаете, будут выбраны обновления для обновленных пакетов вверх по apt-get upgrade ).

Версия ядра 4.6 уже обеспечивала хорошую поддержку Skylake, и с тех пор она улучшилась. Если вы обновляете, как указано выше, запуск apt-get upgrade автоматически обновит до более поздних версий ядра, как только они станут доступны в резервных портах.

2
22.08.2017, 11:20
3 ответа

awkрешение:

--печатать повторяющиеся строки только в полях 1,2 из CSV-файла

awk -F, '$1==f1 && $2==f2{ printf "%s,%s,%s\n%s\n", f1,f2,f3,$0 }
        { f1=$1; f2=$2; f3=$3 }' <(sort -t, -k1,1 -k2,2 file.txt)

Выход:

spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
spark2-thrift-sparkconf,spark.history.fs.logDirectory,true

--исключить повторяющиеся строки из CSV-файла (в полях 1,2)

awk -F, 'f1 && f2{ if($1!=f1 || $2!=f2) { printf "%s,%s,%s\n", f1,f2,f3 } else next }
        { f1=$1; f2=$2; f3=$3 }' <(sort -t, -k1,1 -k2,2 file.txt)

Выход:

spark2-thrift-sparkconf,spark.history.DF.logDirectory,true
spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
0
27.01.2020, 22:18

cut первые два поля, uniqих, как вы предложили, и используйте результат для grepстрок в исходном файле:

cut -d, -f1,2 file.cvs |uniq -d|grep -Ff - file.cvs

Если файл еще не отсортирован, вы должны отсортировать его доuniq:

cut -d, -f1,2 file.cvs |sort|uniq -d|grep -Ff - file.cvs

Для второго вопроса (инвертированного результата )используйте вариант -uвместо-d:

cut -d, -f1,2 file.cvs |sort|uniq -u|grep -Ff - file.cvs
0
27.01.2020, 22:18
$ 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
2
27.01.2020, 22:18

Теги

Похожие вопросы