Вместо использования поиска и восьмеричного режима. Это можно сделать одной командой (При использовании современногоchmod
).
chmod -R u=rw,og=r,+X «directory to be fixed»
Две очень короткие команды, просто для простоты:
awk -F, '$3 != $4' file.csv >file1
awk -F, '$3 == $4' file.csv >file2
Обе эти команды обрабатывают строки в file.csv
как набор полей, разделенных запятыми -. Всякий раз, когда третье поле не равно четвертому полю, первая команда записывает текущую строку (, и она записывается в file1
через перенаправление вывода ). Вторая команда делает то же самое, но с противоположной логикой (, и вывод идет на file2
).
Использование одной команды немного сложнее, но позволяет вам давать имена выходным файлам в командной строке с помощью простых перенаправлений из файловых дескрипторов 3 и 4:
$ awk -F, '{ fd = $3 == $4 ? 4 : 3; print >("/dev/fd/" fd) }' file.csv 3>file1 4>file2
$ cat file1
1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099
$ cat file2
1311,0008,a131,a131,7039
1711,2048,a626565,a626565,7035
Или то же самое, но более запутанное,
awk -F, '{ print >("/dev/fd/" 3 + ($3 == $4)) }' file.csv 3>file1 4>file2
awk -F, '{ print >($3==$4?"matchedFile":"notMatchedFile") }' infile
это выборочное перенаправление строк в один из двух выходных файлов, если столбец #3 был одинаково полное совпадение строки со столбцом #4 (столбцы разделяются запятой, это указано by -F,
), запись в выходной файл matchedFile
, иначе запись в notMatchedFile
.
см. другие варианты соответствия здесь .
$ head matchedFile notMatchedFile
==> matchedFile <==
1311,0008,a131,a131,7039
1711,2048,a626565,a626565,7035
==> notMatchedFile <==
1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099
или аналогично, но сделать команду более компактной:
awk -F, '{ print >"file"($3==$4) }' infile
$ head file[01]
==> file0 <==
1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099
==> file1 <==
1311,0008,a131,a131,7039
1711,2048,a626565,a626565,7035
Метод GNU sed:
F="[^,]*,"
sed -En "
/^($F){2}($F)\\2/w match.csv"'
//!w nomatch.csv
' file.csv
Результаты сохраняются в файлах match/nomatch.CSV в текущем каталоге.