Я хочу напечатать общий файл 2

Один файл содержит опцию ls -l а другой - опцию ls

ls есть только имя файла. У ls -l есть все, включая разрешение и другую информацию.

Есть ли у них способ напечатать вывод общего? Кажется, команда comm не работает (она печатает все)

Я попытался grep -f file1 file2 но ничего не появляется

скажем, вывод ls -l

-rwx------ 1 username 230 date and the filename

ls является

filname

Я пытаюсь получить имя файла aka объединение файла 2. Я не думаю, что есть способ прочитать каталог имени файла в оболочке

Я хочу

filename

2 ответа2

1
for i in ls-file; do grep -e $i$ ls-l-file; done

Это перебирает каждую строку в ls-file (содержащем только команду ls) и присваивает вывод $ i. Затем он обрабатывает ls-l-file (содержащий команду ls -l), ищет совпадения и выводит его.

Обновить

for i in ls-file; do grep -eo $i$ ls-l-file; done

Параметр -o будет выводить только соответствующий текст, поэтому просто имя файла

Обновление 2

while read i; do  grep -oe $i$ ls-l-file; done < ls-file

Это работает лучше.

0

Ты часть пути туда.

Первое, что вам нужно, это извлечь только имена файлов из файла, содержащего вывод ls -l , вы можете сделать это с помощью

awk '{print $9}' < lsl_file

В моей ОС имя файла - 9-й столбец, возможно, это может быть другой столбец в вашем.

Обратите внимание, что comm требует, чтобы оба файла были отсортированы, это уже должно иметь место при выводе ls и ls -l .

Следовательно, ваш однострочник будет:

awk '{print $9}' < lsl_file | comm - ls_file

Единственный аргумент dash для comm указывает ему использовать STDIN.

Важное предположение: это предполагает, что в именах ваших файлов нет пробелов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .