将文件或命令附加到另一个文件的行末尾

将文件或命令附加到另一个文件的行末尾

我已经尝试这样做几个小时了

我有一个包含此数据的文件,我们将其称为 data1:

test1,test2,test3

我想在该数据行的末尾添加一个计数和一个逗号。假设我正在计算 data1 的行数,即 1 行。

echo ", $(wc -l < data1 | bc)"

我希望我的输出是:

test1,test2,test3,1

我尝试过 echo、printf、一些 awk(我仍然不明白这么多)、cat。

答案1

用 awk

awk '{$0=$0","NR}1' data1

答案2

假设一个 POSIX 文件,echo "$(head -c-1 data1)","$(wc -l <data1)"将输出你想要的内容。head删除尾随换行符。

答案3

使用 sed 将数字附加到最后一行:

STRING=`echo "$(wc -l < data1 | bc)"` && sed -i '$s/^\(.*\)$/\1,'"$STRING"'/' data1
$ cat data1 
test1,test2,test3,1

第一部分将行数保存到变量中STRING,sed 获取最后一行并将变量,的内容附加$STRING到行尾。

答案4

paste命令用于添加列:

$ wc -l <data1 | paste -d, file -
test1,test2,test3,       1

这是字面上地你要求什么;的输出wc被添加到文件行的末尾。的输出wc在行的开头有空格,这就是为什么你会得到这里的间距。

要删除此空白:

$ wc -l <data1 | sed 's/^ *//' | paste -d, file -
test1,test2,test3,1

paste此处使用的命令使其-d,在旧列和新列之间插入逗号。该-信号表明新列应从标准输入而不是文件中读取。标准输入来自wc -l计算文件中的行数。

的变体sed只是获取wc输出并删除行开头的所有空格字符。


使用bash进程替换:

paste -d, file <( wc -l <data1 | sed 's/^ *//' )

这里,过程替换 ,<( ... )取代了-

相关内容