Объединение содержимого двух файлов, начиная со второй строки

Si no puede usar rsyncy desea eliminar los archivos de origen solo después de que cada archivo se haya copiado correctamente, puede hacer algo como esto para un directorio -por -directorio, archivo -por -transferencia de archivos:

if cd /path/to/files; then
for file in *; do
    if scp -pr "$file" user@remotehost.example.com:/destination/files/"$file"; then
        rm -fr "$file"
    else
        echo "Transfer of '$file' failed.  Not removing local copy." 1>&2
    fi
done; fi

Si desea realizar una verificación de cordura adicional -antes de eliminar el archivo local, puede agregar una verificación de coherencia, pero esto ralentizará las cosas para archivos muy grandes, y esto rápido -y -sucio la suma de comprobación solo funcionará en archivos; no directorios:

if cd /path/to/files; then
for file in *; do
    if scp -pr "$file" user@remotehost.example.com:/destination/files/"$file"; then
        if [[ "$(md5sum < "$file" )" = "$( ssh user@remotehost.example.com md5sum < /destination/files/"$file" )" ]]; then
            rm -fr "$file"
        else
            echo "Unable to validate remote '$file'.  Not removing local copy" 1>&2
        fi
    else
        echo "Transfer of '$file' failed.  Not removing local copy." 1>&2
    fi
done; fi
1
06.02.2019, 23:43
4 ответа

Похоже, вы хотите объединить содержимое двух файлов, пропустив первую строку каждого файла.

Получить все, кроме первой строки файла, можно разными способами, например, с помощьюawk:

awk 'FNR > 1' file

С помощью awkна самом деле довольно легко делать то, что вы хотели бы сделать с этой точной awkпрограммой:

$ awk 'FNR > 1' file1 file2
4 5
5 6
7 6
1 4

FNR— это переменная, поддерживаемая awk, которая содержит текущий номер записи (номер строки по умолчанию )в текущем файле. Если FNRв этой программе строго больше 1, то текущая строка в текущем файле не является первой строкой этого файла. Программа только с таким условием вызовет печать строк, для которых условие истинно.

2
28.04.2021, 23:37

Используя sed, я сделал по методу ниже

sed -n -e '1!p' f1 ;sed -n -e '1!p' f2

выход

4 5
5 6
7 6
1 4
0
28.04.2021, 23:37

Почему бы и нет

awk '{print $0}' file1 file2
-1
28.04.2021, 23:37

Для полноты картины вот решение на основе GNUtail-

tail -q -n +2 file1 file2
2
28.04.2021, 23:37

Теги

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