在Bash中串联文件

时间:2019-09-23 13:29:43

标签: bash awk

假设我正在编写一个shell脚本foo.bash,以用这样的逗号连接test/*.txt的内容:

> cat test/x.txt
a b c
> cat test/y.txt
1 2 3
> foo.bash test
a b c,
1 2 3

您将如何编写这样的脚本?

3 个答案:

答案 0 :(得分:1)

for file in /tmp/test/*.txt; do
    echo -n "$(cat "$file"),"
done | sed 's/.$//'

或者也许

for file in /tmp/test/*.txt; do
    sed 's/$/,/' "$file"
done | sed 's/.$//'

答案 1 :(得分:1)

请尝试以下操作(如果要连接文件行,请用逗号逐行连接)。

 paste -d, *.txt


EDIT2: :要用,连接所有.txt文件内容,请尝试执行一次(需要GNU awk)。

awk 'ENDFILE{print ","} 1' *.txt | sed '$d'

答案 2 :(得分:0)

您可以使用regex来实现它。下面的命令获取每个文件的内容,并将其附加在文件名($ARGV)之后。

$ grep -ER '*'
a.txt:a
b.txt:b
c.txt:c
$ perl -pe 's/^(.*)\n$/$ARGV:\1,/;' * > file.txt
$ cat file.txt
a.txt:a,b.txt:b,c.txt:c,