查找文件并以特定格式显示结果到txt文件

时间:2014-10-19 21:20:37

标签: linux bash shell unix

我目前在几个目录上有很多文本文件,我正在排序并将结果存储在文本文件中。问题不是排序部分,而是格式化放置在文本文件中的输出。我希望以这种格式输出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'

1 个答案:

答案 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