如何在一行中打印用逗号分隔的所有文本文件位置?我可以在for循环中执行此操作吗?
以下是文件示例。
/data/home/files/txt_files_1/file1.txt
/data/home/files/txt_files_1/file2.txt
/data/home/files/txt_files_1/file3.txt
/data/home/files/txt_files_2/file1.txt
/data/home/files/txt_files_2/file2.txt
/data/home/files/txt_files_2/file3.txt
输出看起来像
/data/home/files/txt_files_1/file1.txt,/data/home/files/txt_files_1/file2.txt,/data/home/files/txt_files_1/file3.txt \
/data/home/files/txt_files_2/file1.txt,/data/home/files/txt_files_2/file2.txt,/data/home/files/txt_files_2/file3.txt
由于
这是正确的代码
#!/bin/bash
delim=""
for i in /data/home/files/txt_files_1/file*
do
printf "%s%s" "$delim" "$i"
delim=","
done
printf "\\"
printf "\n"
for i in /data/home/files/txt_files_2/file*
do
printf "%s%s" "$delim" "$i"
delim=","
done
答案 0 :(得分:2)
对于单个文件输入:
awk -v OFS=, -v RS= 'NF { $1 = $1; print }' file
输出:
/data/home/files/txt_files_1/file1.txt,/data/home/files/txt_files_1/file2.txt,/data/home/files/txt_files_1/file3.txt
/data/home/files/txt_files_2/file1.txt,/data/home/files/txt_files_2/file2.txt,/data/home/files/txt_files_2/file3.txt
或者
awk -v OFS=, -v RS= -v ORS='\n\n' 'NF { $1 = $1; print }' file
输出:
/data/home/files/txt_files_1/file1.txt,/data/home/files/txt_files_1/file2.txt,/data/home/files/txt_files_1/file3.txt
/data/home/files/txt_files_2/file1.txt,/data/home/files/txt_files_2/file2.txt,/data/home/files/txt_files_2/file3.txt
答案 1 :(得分:1)
您可以使用printf "%s," "$file"
将多个名称打印到一行中。为了使分隔符合适,我使用了这个技巧:
delim=""
...loop...
printf "%s%s" "$delim" "$file"
delim=","
printf "\n"
答案 2 :(得分:1)
<command to generate lines of paths> | tr '\n' ','
示例:
echo "/data/home/files/txt_files_1/file1.txt
/data/home/files/txt_files_1/file2.txt
/data/home/files/txt_files_1/file3.txt
/data/home/files/txt_files_2/file1.txt
/data/home/files/txt_files_2/file2.txt" | tr '\n' ','
输出:
/data/home/files/txt_files_1/file1.txt,/data/home/files/txt_files_1/file2.txt,/data/home/files/txt_files_1/file3.txt,,/data/home/files/txt_files_2/file1.txt,/data/home/files/txt_files_2/file2.txt
答案 3 :(得分:1)
假设您的输入位于名为list
的文件中,则此Perl单线程执行此任务:
perl -F'\n' -00 -ane 'push @a, join(",", @F) }{ print(join(" \\\n\n", @a), "\n")' list
-00
与-n
结合使用,一次读取一个块(段落)的文件。 -a
开关与-F'\n'
组合会自动拆分每个新行上的文字。结果进入数组@F
。@F
@a
的所有元素都会打印出来,按照您的指定连接在一起。最后的附加“\ n”是可选的。输出:
/data/home/files/txt_files_1/file1.txt,/data/home/files/txt_files_1/file2.txt,/data/home/files/txt_files_1/file3.txt \
/data/home/files/txt_files_2/file1.txt,/data/home/files/txt_files_2/file2.txt,/data/home/files/txt_files_2/file3.txt