Предполагая, что файл является файлом TSV ("значения, разделенные табуляцией" ), используяcsvkit
:
$ csvcut -t -c foo,baz file.tsv
foo,baz
1,alpha
2,beta
3,gamma
Выходные данные будут правильно отформатированы в формате CSV, но их можно легко изменить обратно в TSV:
$ csvcut -t -c foo,baz file.tsv | csvformat -T
foo baz
1 alpha
2 beta
3 gamma
Параметр -c
для csvcut
также может принимать числа и диапазоны, а также может использоваться для перестановки столбцов входных данных (функция, которую я часто пропускаю в стандартном cut
утилита ).
Команда basename $file
использует переменную без кавычек. Значение переменной будет разделено на отдельные аргументы (, и каждый аргумент будет дополнительно подвергаться подстановке имен файлов )и передаваться утилите basename
.
Эта утилита ожидает один или два аргумента. С двумя аргументами он вернет имя файла без пути к каталогу и дополнительно обрежет второй аргумент в конце имени (, так что basename path/to/file.txt.txt
возвращаетfile
). Вы даете ему четыре аргумента, так как именно на столько слов разбивается имя файла JERASH - XZ 837367432.pdf
.
Вместо этого процитируйте расширение переменной $file
:
filenamenoext=$(basename "$file".pdf)
(обратите внимание, что filenamenopath
не нужен, если он вам не понадобится позже для чего-то другого)
См. также:
Кроме того, при использовании printf
для печати переменных данных используйте строку формата и заключите переменную в кавычки:
printf 'Filename without path: %s\n' "$filenamenopath"