unix将文件列表连接到行

时间:2017-09-19 10:59:00

标签: linux bash shell awk ls

在目录中,有几个文件,例如:

file1 
file2 
file3

是否有一种简单的方法可以连接这些文件,以便在bash中获取一行(通过“OR”连接),如下所示:

file1 OR file2 OR file3

或者我需要为它编写脚本吗?

5 个答案:

答案 0 :(得分:2)

您可以使用此功能打印所有文件名(包括带有空格,换行符或特殊字符的文件名)" OR "作为分隔符(假设您的文件名不包含ASCII代码4 < / em>的):

orfiles() {
   local IFS=$'\4'
   local out="$*"
   echo "${out//$'\4'/ OR }"
}

然后将其称为:

orfiles *

工作原理:

  1. 我们在函数内部将IFS(内部字段分隔符)设置为ASCII 4
  2. 我们将"$*"的输出存储在局部变量out中。这会在变量\4中的每个文件名后面放置$out
  3. 最后使用BASH字符串替换,我们在\4打印输出时全局替换" OR " {/ 1}}。
  4. 在Unix系统中$out只是一个字符分隔符,因此它不能存储多字符串IFS,我们必须分两步完成,如上所示。

答案 1 :(得分:1)

您只需使用

即可
printf '%s OR ' $(ls -1 *) | sed 's/OR $/''/'; echo -e '\n'

ls -1 *是目录。

答案 2 :(得分:1)

应该考虑的时刻是文件名可以包含空格。
使用以下 ls + awk 解决方案:

ls -1 * | awk '{ r=(r)? r" OR "$0 : $0 }END{ print r }'

使用换行符的文件名的解决方法:

echo -e $(ls -1b hello* | awk -v RS= '{gsub(/\n/," OR ",$0); gsub(/\\ /," ",$0); print $0}')
  • -b - ls 选项为非图形字符打印C样式转义

答案 3 :(得分:0)

ls -1|awk -v q='"' '{printf "%s%s", NR==1?"":" OR ", q $0 q}END{print ""}'

ls&amp; awk方法,例如文件名包含空格:

kent$  ls -1
file1
file2
'file with OR and space'

kent$  ls -1|awk -v q='"' '{printf "%s%s", NR==1?"":" OR ", q $0 q}END{print ""}'
"file1" OR "file2" OR "file with OR and space"

答案 4 :(得分:0)

p3 <- p2 + stat_function(fun = dnorm) + 
    stat_function(fun = dnorm, geom = "area", fill = "blue", alpha = 0.3, 
                  xlim = c(ztest,zcrit)) +
    geom_text(x = 1.13, y = 0.1, size = 5, fontface = "bold",
              label = paste0(valor_area_z * 100, "%")) +
    stat_function(fun = dnorm, geom = "area", fill = "red", alpha = 0.5, 
                  xlim = c(zcrit,xvalues$x[2])) +
    geom_text(x = 2.27, y = 0.015, size = 3, fontface = "bold",
              label = paste0(valor_area_zc * 100, "%")) +
    scale_x_continuous(breaks = c(-3:3)) + 
    labs(x = "\n z", y = "f(z) \n", title = "Distribuição Normal \n") +
    theme_fivethirtyeight()

p3