Измените строку, чтобы удалить символы

Эти ответы не требуют сортировки входных данных:

Храните count и last-line-seen в массивах. Требует много памяти для больших файлов и требует GNU awk

gawk '
    {count[$1]++; line[$1]=$0} 
    END {
        PROCINFO["sorted_in"]="@val_str_asc"
        for (key in line) if (count[key] == 1) print line[key]
    }
' file

Сканируйте файл дважды, сначала для получения количества, затем для печати строк с количеством 1

awk 'NR == FNR {count[$1]++; next} count[$1]==1' file file

Это будет быстрее всего и потребует меньше памяти, используя преимущества отсортированного ввода:

awk '
    prev_key && prev_key != $1 {if (count==1) print prev_line; count=0}
    {prev_key=$1; prev_line=$0; count++}
    END {if (count==1) print prev_line}
' file
0
07.06.2018, 16:52
1 ответ

Использованиеawk:

awk '{print substr($18,1,12)}' input

Это напечатает символы 1 -12 столбца 18. Это предполагает, что ваш текстовый файл разделен пробелами. Что, скорее всего, не так.

Для CSV:

awk -F, '{print substr($18,1,12)}' input

На основе комментария Steeldriver о добавлении этого вывода в новый столбец:

awk '{$(NF+1) = substr($18,1,12)} 1' input > output

К сожалению, при этом создается новый файл. gawkможет изменить файл на месте, но лучше всего создать новый файл, а затем удалить старый.

3
28.01.2020, 02:23

Теги

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