打印结果在bash中用逗号分隔一行

时间:2014-07-22 12:38:00

标签: bash

如何在一行中打印用逗号分隔的所有文本文件位置?我可以在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

4 个答案:

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