我目前在几个目录上有很多文本文件,我正在排序并将结果存储在文本文件中。问题不是排序部分,而是格式化放置在文本文件中的输出。我希望以这种格式输出file '/path/to/file1'
目前显示/path/to/file1
。我想在一个进程内完成所有这些操作(不必运行额外的循环或更改以更改格式)。
$ target=~/tmp/shuf
$ destination=/filepath/
$ find $target -iname "*.txt" -type f | shuf | awk -F- '{printf("%s:%s\n", $0, $NF)}' | sort -t : -k 2 -s | cut -d : -f 1 | xargs -n1 basename | sed "s,^,$destination," > $destination/results.txt
当前results.txt:
/path/to/cs650-software_methodologies-fname_lname-001.txt
/path/to/s630-linux_research_paper-fname_lname-001.txt
Desired results.txt:
file '/path/to/cs650-software_methodologies-fname_lname-001.txt'
file '/path/to/s630-linux_research_paper-fname_lname-001.txt'
答案 0 :(得分:1)
如果您没有替换,我发现awk
通常更容易进行此类格式化。这也允许我们跳过basename调用并将该部分保留到awk
。请注意,如果您的实际文件名中有任何正斜杠,这将无效。
find $target -type f -iname "*.txt" \
| shuf \
| awk -F- '{printf("%s:%s\n", $0, $NF)}' \
| sort -t : -k 2 -s \
| cut -d : -f 1 \
| awk -F / '{printf("file '\''%s'\''\n", $0)}' \
> $destination/results.txt