Вот одно решение (скопировать/вставить в Ваш терминал):
perl -pe 's/\n/xxx/g' file1 | sed 's/xxx@/\n@/g; s/xxx$/\n/' |
grep -vFf file2 | sed 's/xxx/\n/g'
Там существует три отдельных команды, каждая из которых передает по каналу (|
) его вывод к следующему. Первые два просто получают каждую запись на отдельной строке путем замены \n
с xxx
( xxx
именно так, мы можем знать, где разрывы строки). Если Вы выполняете их один, они делают:
$ perl -pe 's/\n/xxx/g' file1 | sed 's/xxx@/\n@/g; s/xxx$/\n/'
@D7MHBF:11:1449:1988 1:NxxxNGCCCATTCTATGCAACAAATTCAACAAAGTCTCCCAxxx+xxx#1=DDFFDFHHDHIGGFIIIIIIIHHIHIGDGIGGEH
@D7MHBF:11:1681:1959 1:NxxxNGGTTTAGAGCCTGTATTTTGAACGTAATAGCAGGGTxxx+xxx#1=ADDFFHHDDHEHIHJJJICCFHGEIGJGGGIJJF
@D7MHBF:11:1778:1946 1:NxxxNTGTGGGTTCAACAATGGGCTCATTGCCATCAGCGAGxxx+xxx#1=ADDFDHHGHFHGGIIJJJGIIJIFIIJJJIJIIJ
@D7MHBF:11:1854:1955 1:NxxxNTTGATTGTGCTTCTTATGAGCAAAAATGTTGATGACxxx+xxx#1=DFFFFHHHGHHIJEHIIGGGGIJJJJIHIIHIII
@D7MHBF:11:1903:1972 1:NxxxNACTACTATACTATGAAGTGGCTATGACAATTGTCTTxxx+xxx#1=DFFFFHHHGHHIJEHIIIGGGGIJJJJIHIIHII
Как Вы видите, теперь каждая запись находится на своей собственной строке. Так, можно теперь передать это grep
и скажите этому печатать все строки, которые не делают (-v
) соответствуйте любому из шаблонов, найденных в file2 (-f file2
). Это печатает:
$ perl -pe 's/\n/xxx/g' file1 | sed 's/xxx@/\n@/g; s/xxx$/\n/' | grep -vFf file2
@D7MHBF:11:1681:1959 1:NxxxNGGTTTAGAGCCTGTATTTTGAACGTAATAGCAGGGTxxx+xxx#1=ADDFFHHDDHEHIHJJJICCFHGEIGJGGGIJJF
@D7MHBF:11:1854:1955 1:NxxxNTTGATTGTGCTTCTTATGAGCAAAAATGTTGATGACxxx+xxx#1=DFFFFHHHGHHIJEHIIGGGGIJJJJIHIIHIII
Наконец, мы прокручиваем его sed
снова, для замены xxx
с новыми строками и получают желаемый вывод:
$ perl -pe 's/\n/xxx/g' file1 | sed 's/xxx@/\n@/g; s/xxx$/\n/' |
grep -vFf file2 | sed 's/xxx/\n/g'
@D7MHBF:11:1681:1959 1:N
NGGTTTAGAGCCTGTATTTTGAACGTAATAGCAGGGT
+
#1=ADDFFHHDDHEHIHJJJICCFHGEIGJGGGIJJF
@D7MHBF:11:1854:1955 1:N
NTTGATTGTGCTTCTTATGAGCAAAAATGTTGATGAC
+
#1=DFFFFHHHGHHIJEHIIGGGGIJJJJIHIIHIII
Вероятно, некоторые файлы открыты процессами, поэтому их удаление еще не освободило место.
Итак, если вы удалили большой файл журнала или аналогичный, перезапустите процесс, который выполнял запись в этот файл.
Вы можете получить дополнительную информацию о том, какие файлы открыты, размер и какой процесс их использует, с помощью команды lsof .
Ваши inode, вероятно, израсходованы: проверьте использование inode: df -i
EDIT: также может быть, что дисковое пространство, выделенное виртуальной системе, составляет 10 ГБ, но базовая файловая система на хосте была перегружена, и теперь у виртуальных хостов не осталось места для совместного использования.