Вот как на самом деле делать то, что вы пытаетесь сделать до сих пор, чтобы сохранить пробелы в последней строке (я использовал переменные с именами foo и bar, так как вы не сказали нам, что это за строки, измените эти имена в соответствии с):
$ awk -v OFS='\t' '{foo=$7; sub(/([^[:space:]]+[[:space:]]+){10}/,""); bar=$0; print NR, foo, bar}' file
1 18212 path/to/file with spaces and backslashes/folder\scn.workflow/documents.wflow
2 927 path/to/file with spaces and backslashes/folder\scn.workflow/Info.wflow
3 136 path/to/file with spaces and backslashes/folder\scn.workflow/version.wflow
Для вызова некоторой команды на "bar" (я использую echo
ниже) может быть:
awk -v OFS='\t' '{
foo = $7
sub(/([^[:space:]]+[[:space:]]+){10}/,"")
bar = $0
cmd = "echo \047" bar "\047"
md5 = ( ((cmd | getline line) > 0) ? line : "N/A" )
close(cmd)
print NR, foo, bar, md5
}' file
1 18212 path/to/file with spaces and backslashes/folder\scn.workflow/documents.wflow path/to/file with spaces and backslashes/folder\scn.workflow/documents.wflow
2 927 path/to/file with spaces and backslashes/folder\scn.workflow/Info.wflow path/to/file with spaces and backslashes/folder\scn.workflow/Info.wflow
3 136 path/to/file with spaces and backslashes/folder\scn.workflow/version.wflow path/to/file with spaces and backslashes/folder\scn.workflow/version.wflow
, но все зависит от того, как работает ваша команда (например, принимает ли он ввод в качестве аргумента, или из файла, переданного в качестве аргумента, или из канала, или чего-то еще, и обрабатывает ли он по 1 строке за раз, или весь ввод сразу, или что-то еще) и можетболее эффективные способы получить тот же результат в зависимости от этого.